为什么传入函数时我的int数组的大小会发生变化?
我的主要内容是:
int numbers[1];
numbers[0] = 1;
printf("numbers size %i", sizeof(numbers));
printSize(numbers);
return 0;
这是printSize方法
void printSize(int numbers[]){
printf("numbers size %i", sizeof(numbers));}
你可以看到我对数字数组没有做任何其他事情但是当它到达printSize方法时尺寸会发生变化......?如果我使用*数字的值,它会打印正确的大小......?
答案 0 :(得分:8)
函数的任何数组参数都将衰减为指向数组第一个元素的指针。实际上,您的函数void printSize(int[])
实际上具有签名void printSize(int*)
。完整,它相当于:
void printSize(int * numbers)
{
printf("numbers size %i", sizeof(numbers));
}
以这种方式编写希望能让你更清楚地看到指针的大小,而不是原始数组。
像往常一样,我建议the C book's解释这个:)
答案 1 :(得分:1)
好吧,你只需要指向int的指针大小。数组只是指针和偏移的奇特语法。