其他:
1.數組下標可爲負:a[-1] 相當於 a+(-1);
2.聯合體大小就是成員中最大類型的大小;
如何計算一個結構體的大小?
例如:
struct Test{
int Num;
char *name;//指針大小取決於編譯器的位數 ,64位 爲:8字節 32位爲:4字節
short date;
char ch;
}*p;
總結計算大小規則:
1.其大小也與成員順序有關係,因爲前一個成員地址需要與下一個成員地址構成需要滿足地址對齊,即當前所佔字節數需爲當前編譯器寬度的整數倍
如以上結構體(假設編譯器爲64位):int num 佔4字節,下一成員char * name 佔用8字節
首先4+8=12>8,即編譯器寬度(即指針所佔大小:8)存放不下,故第一個成員補全爲編譯器寬度爲8字節,(需保持和下一成員地址對齊,如果當前幾個數據成員地址實現對齊,則從下一個成員爲起點再重複以上規則))
接下來:short date 佔用2字節,char ch 佔用1字節 2+1=3字節,一個地址寬度能放下,但8+8+3=19不是8的倍數,故需要補齊,其實就是再補5個字節,故此結構體大小爲:24字節
注意:如何補?補幾個字節,取決於編譯器寬度,和其中佔用內存大小最大的成員,如過超過編譯器寬度,以其數據成員所佔內存大小爲對齊基準,否則補齊到編譯器寬度即可