2010-07-04 96 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