int数组大小的变化

joe*_*els 0 c arrays int

可能重复:
C编程语言中数组的大小?

为什么传入函数时我的int数组的大小会发生变化?

我的主要内容是:

int numbers[1];
numbers[0] = 1;
printf("numbers size %i", sizeof(numbers));
printSize(numbers);
return 0;
Run Code Online (Sandbox Code Playgroud)

这是printSize方法

void printSize(int numbers[]){
printf("numbers size %i", sizeof(numbers));}
Run Code Online (Sandbox Code Playgroud)

您可以看到我对数字数组没有做任何其他事情,但是当它到达printSize方法时大小会改变...?如果我使用*数字的值,它打印正确的大小......?

det*_*tly 8

函数的任何数组参数都将衰减为指向数组第一个元素的指针.所以实际上,你的功能void printSize(int[])有效地具有签名void printSize(int*).完全,它相当于:

void printSize(int * numbers)
{
    printf("numbers size %i", sizeof(numbers));
}
Run Code Online (Sandbox Code Playgroud)

以这种方式编写希望使您更清楚地看到指针的大小,而不是原始数组.

像往常一样,我推荐C书对此解释:)