2016-04-14 53 views
-2

所以我在看這段代碼:C中結構體大小的解釋?

#include <stdio.h> 

struct Student { 
    int id; 
    char name[32]; 
} s, *sp; 

int main() { 
    printf("sizeof(structStudent) = %u\n", sizeof(structStudent)); 
    printf("sizeof(s) = %u\n", sizeof(s)); 
    printf("sizeof(structStudent*) = %u\n", sizeof(structStudent*)); 
    printf("sizeof(sp) = %u\n", sizeof(sp)); 
    return 0; 
} 

輸出如下:

sizeof(struct Student) = 36 
sizeof(s) = 36 
sizeof(struct Student*) = 4 
sizeof(sp) = 4 

爲什麼是struct Student* 4的大小,以及爲什麼是sp也是4的大小?我的powerpoint沒有詳細說明這一點。我知道爲什麼struct Students的大小爲36:因爲32 char字節+ 4字節(對於一個int)= 36總數。

+0

這甚至沒有編譯。 – EOF

+1

大小爲4的指針是32位系統上的指針。 –

+1

'sp'有'struct student *'類型,所以這兩個東西報告相同的大小 –

回答

4

在你的平臺上,簡單的指針佔用32位。這基本上是32位平臺的定義。

白宮的地址不必比我的地址長,因爲白宮比我的房子大。

5

struct Student *指針並且它幾乎不包含任何數據,它只是一個指針。但指針存儲在某處並佔用一些空間,在您的情況下爲4個字節。

struct Student然而,它是一個功能齊全的結構,佔用了您計算的太多空間(數組和id佔用它們的空間)。