2012-05-18 63 views
0

可能重複:
Sizeof an array in the C programming language?確定數組大小

在我的主要功能我有以下代碼:

struct student s1 = {"zack",0,0,82}; 
struct student s2 = {"bob",0,0,80}; 
struct student s3 = {"joe",0,0,97}; 
struct student s4 = {"bill",0,0,100}; 

struct student c[] = {s1,s2,s3,s4}; 

printf("%d\n\n", arrayLengths(c)); 
printf("%d\n\n", sizeof(c)/sizeof(c[0])); 

其中arrayLength定義爲:

int arrayLengths(struct student g[]) { 
    return sizeof(g)/sizeof(g[0]); 
} 

雖然我得到兩個不同的結果,但重複的代碼。我的主機輸出是:

0 
4 

什麼給了?爲什麼這樣,我怎麼能把它放在它自己的功能?

回答

1

arrayLengths裏的代碼如何知道數組有多大?

2

當一個數組傳遞給一個函數時,它衰減到一個指針,指向數組中的第一個元素。所以:

int arrayLengths(struct student g[]) { 
    return sizeof(g)/sizeof(g[0]); 
} 

居然是:

int arrayLengths(struct student* g) { 
    return sizeof(struct student*)/sizeof(struct student); 
} 
0

陣列傳遞給函數衰變成一個指針。指針大小通常是32位系統上的4個字節。

而在主函數中數組的大小將等於

sizeof(array element type) * (number of elements in the array) 

這應該解釋一下,你所看到的行爲。