c에서 함수에 대한 인수로 수신된 정수 배열의 크기 찾기
함수에 인수로 전달된 정수 배열의 크기를 찾고 싶습니다.여기 제 코드가 있습니다.
void getArraySize(int arr[]){
int len = (sizeof(arr)/sizeof(arr[0])
printf("Array Length:%d\n",len);
}
int main(){
int array[] = {1,2,3,4,5};
getArraySize(array);
return 0;
}
다음 경고가 표시됩니다.
sizeof on array function parameter will return size of 'int *' instead of 'int []' [-Wsizeof-array-argument]
내부의 정수 배열 길이를 찾을 수 있도록 도와주세요.function
getArraySize
그러나 크기를 찾을 수 있습니다.array
내부에main
기능.로 통하기 때문에pointer
찾을 수 없습니다.length
안에서부터function
.
하지만 나는 생각이 있습니다.이것을 넣어둘 수 있습니다.try/catch
블록(C
Try Catch가 없고 OS에 종속된 점퍼만 있음) 및 루프가 발생할 때까지segmentation fault
.
다른 방법으로 길이를 찾을 수 있을까요?integer array
내부에function
그런 식으로 하면 안 됩니다.배열을 함수에 전달하면 배열이 첫 번째 요소에 대한 포인터로 붕괴되고, 이때 크기에 대한 지식이 손실됩니다.
함수에 전달되는 배열의 크기를 알고 싶다면, 붕괴 전에 이를 해결하고 배열과 함께 다음과 같은 정보를 전달해야 합니다.
void function (size_t sz, int *arr) { ... }
:
{
int x[20];
function (sizeof(x)/sizeof(*x), x);
}
배열을 함수에 전달하면 해당 주소가 포인터로 함수에 전달됩니다.
그렇게void getArraySize(int arr[])
와 동등합니다.void getArraySize(int* arr)
.
결과적으로.sizeof(arr)
수확량sizeof(int*)
아마 당신이 원하는 것이 아닐 겁니다
안전하게 사용할 수 있습니다.sizeof(arr)/sizeof(arr[0])
의 선언 범위 내에서만arr
.
당신의 경우, 신고 범위는arr
함수입니다.main
.
전달되면 배열이 포인터로 감쇠합니다.
따라서 크기는 원래 배열에 적용하는 경우에만 배열의 길이를 찾는 데 사용됩니다.
따라서 기능하려면 배열 길이를 별도의 인수로 전달해야 합니다.
함수 내부의 길이를 결정할 방법이 없습니다.네가 합격하든arr
,sizeof(arr)
포인터 크기를 항상 반환합니다.따라서 가장 좋은 방법은 요소의 수를 별도의 인수로 전달하는 것입니다.
sizeof
배열 길이를 원래 배열에 적용하는 경우에만 해당 배열을 찾습니다.
int arr[5]; //real array. NOT a pointer
sizeof(arr); // :)
그러나 배열이 포인터로 붕괴될 때까지 의 크기는 배열이 아닌 포인터의 크기를 제공합니다.
void getArraySize(int arr[]){
sizeof(arr); // will give the pointer size
}
이것이 왜 발생하는지에 대해서는 약간의 추론이 있습니다.C 배열도 길이를 알 수 있도록 어떻게 물건을 만들 수 있을까요?
첫 번째 아이디어는 배열이 함수로 전달될 때 포인터로 감쇠하고 유형 시스템에서 배열 길이를 계속 유지하는 것이 아닙니다.
배열을 함수에 전달하면 포인터로 감쇠합니다.그래서 그sizeof
은 함는크반환니다의 합니다.int *
입니다.
sizeof on array function parameter will return size of 'int *' instead of 'int []'
제가 제안했듯이 배열을 함수에 전달할 때 요소 수도 전달해야 합니다.
getArraySize(array, 5); // 5 is the number of elements in array
잡으세요.
void getArraySize(int arr[], int element){
// your stuff
}
그렇지 않으면 어레이 크기를 계산하는 일반적인 방법 -
void getArraySize(int arr[], int len){
// your stuff
printf("Array Length:%d\n",len);
}
int main(){
int array[] = {1,2,3,4,5};
int len = (sizeof(arr)/sizeof(arr[0]); // will return the size of array
getArraySize(array, len);
return 0;
}
언급URL : https://stackoverflow.com/questions/25680014/find-the-size-of-integer-array-received-as-an-argument-to-a-function-in-c
'programing' 카테고리의 다른 글
r2dbc 및 플라이웨이를 사용하여 스프링 부트 애플리케이션에서 h2 설정 (0) | 2023.07.28 |
---|---|
Oracle에서 변수 값을 선택하는 방법은 무엇입니까? (0) | 2023.07.28 |
복귀를 기다리는 약속과 복귀를 약속하는 약속의 차이 (0) | 2023.07.23 |
JavaScript 파일에 매개 변수 전달 (0) | 2023.07.23 |
Python 2.7은 사용자 입력을 받고 인용문 없이 문자열로 조작합니다. (0) | 2023.07.23 |