C 整数数组大小更改

C 整数数组大小更改,c,arrays,int,C,Arrays,Int,可能重复: 为什么我的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));} 您可以看到,我没有对数

可能重复:

为什么我的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方法时,大小会发生变化。。。?如果我使用*numbers的值,它将打印正确的大小…?

那么,您只需要得到指向int的指针的大小。数组只是指针和偏移量的奇特语法。

函数的任何数组参数都将衰减为指向数组第一个元素的指针。因此,实际上,您的函数
voidprintsize(int[])
有效地具有签名
voidprintsize(int*)
。总的来说,这相当于:

void printSize(int * numbers)
{
    printf("numbers size %i", sizeof(numbers));
}
希望这样写能让您更清楚地看到指针的大小,而不是原始数组


像往常一样,我建议对此进行解释:)

已经有很多重复,例如,我们需要一个“不使用正则表达式解析HTML”的等价断言。@Neil Butterworth:“数组”不是指针,但C中的“数组语法”确实只是
*(ptr+index)
-如果我可以的话,请向右走。我本以为很明显,当我谈论某些东西时,我指的是数组语法,而不是其他东西的“奇特语法”……这完全无法解释他们代码的第一部分是如何按照预期工作的,而不是第二部分。