이것은 배열 이름이 함수에 전달 될 때 포인터로 붕괴하기 때문입니다. 예를 들어
int main()
{
int arr[3] = { 1, 2, 3 };
printf("main: %zu\n", sizeof(arr));
f(arr);
}
void f(int *ptr)
{
printf("%zu", sizeof(ptr));
}
출력 :
main: 3 * sizeof(int)
f: sizeof(int *)
또한 (sizeof...
는 컴파일러의 실제 값으로 대체되는 경우), 그것은 배열 main
여부 선언되는지에 의존 그다지 . 이 규칙은 더 일반적입니다 : 배열이 선언 된 함수에서, 그것은 실제 배열로 취급됩니다. 함수에 인수로 전달 된 경우에만 첫 번째 요소에 대한 포인터로 변환됩니다. 이것이 배열을 취하는 함수가 첫 번째 요소에 대한 포인터와 size 인수를 취하는 이유입니다.
void print(const int *arr, size_t n)
{
size_t i;
for (i = 0; i < n; ++i)
printf("%d\n", arr[i];
}
관련 항목 : http://stackoverflow.com/q/492384/694576 – alk