我使用以下代码将数组传递给函数并在调用函数之前和之后打印它的大小:
#include <stdio.h>
int passing_array(int array[]) {
int size = sizeof(array);
printf("The size after passing: %d\n", size);
}
int main () {
int a[] = {1, 2, 3};
int size = sizeof(a);
printf("The size before passing: %d\n", size);
passing_array(a);
return 0;
}
运行代码后,我得到了一个奇怪的结果:
传球前的尺寸:12
传球后的大小:8
我的问题是:为什么数组的大小从12变为8?
答案 0 :(得分:4)
int passing_array(int array[]) {
int size = sizeof(array);
printf("The size after passing: %d\n", size);
}
与
相同int passing_array(int* array) {
int size = sizeof(array);
printf("The size after passing: %d\n", size);
}
因此,size
是指针的大小。
答案 1 :(得分:2)
将数组传递给函数时,它会衰减到指向数组第一个元素的指针。因此,参数列表中的int array[]
实际上是int *array
,而sizeof
正在返回指针的大小。