int数组大小的变化

时间:2010-07-04 09:31:35

标签: c arrays int

  

可能重复:
  Sizeof an array in the C programming language?

为什么传入函数时我的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方法时尺寸会发生变化......?如果我使用*数字的值,它会打印正确的大小......?

2 个答案:

答案 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的指针大小。数组只是指针和偏移的奇特语法。