2010-07-04 100 views
0

可能重复:
Sizeof an array in the C programming language?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));} 

你可以看到,我不,当它做任何事情都要以数字数组,但大小变化获取printSize方法...?如果我使用*号码的值,它会打印出正确的尺寸......?

+2

很多重复的SO已经,例如, [C编程语言中数组的大小?](http://stackoverflow.com/questions/1975128/sizeof-an-array-in-the-c-programming-language) – 2010-07-04 09:41:58

回答

8

函数的任何数组参数都会衰减到指向数组的第一个元素的指针。所以实际上,您的功能void printSize(int[])实际上有签名void printSize(int*)。在全面,它等同于:

void printSize(int * numbers) 
{ 
    printf("numbers size %i", sizeof(numbers)); 
} 

写这样希望使它更清楚一点,你正在寻找一个指针的大小,而不是原来的数组。

像往常一样,我建议the C book's这个解释:)

1

嗯,你只是得到一个int指针的大小。数组只是指针和偏移量的奇特语法。

+5

数组不是指针。 – 2010-07-04 09:35:33

+0

我们需要一个“不要用正则表达式解析HTML”等价于该断言。 – detly 2010-07-04 09:46:10

+0

@Neil Butterworth:“数组”不是指针,但是C中的“数组语法”确实是'*(ptr + index)'的语法建议! -1如果我可以评论 – ShinTakezou 2010-07-04 14:04:40