C語言小知識點0
阿新 • • 發佈:2019-01-11
今天學習C語言發現了以前的一些知識上的盲點,就記錄下來。
printf("%d,%d\n", sizeof('A'), sizeof("A"));
這個程式碼列印的結果是 4,2
我去查了下資料這個'A'是integer character constant型別,其實就是我們自己所獲得的ascii碼。在三十二位的windows系統裡int是4個位元組所以列印的4,這裡這個當成了int型別。
2是因為雙引號會認為是字串,所以在其後系統自動添加了'\0',所以其實是兩個字元。
typedef struct strtype3 { char a;int b; } X3;
X3 a = { 1 ,'A' }; printf("%d\n", &a); printf("%d,%d\n", &a.a, &a.b);
//列印結果 14810844 14810844,14810848
這裡可以看出屬性a和屬性b是相差了4個位元組,但是a是char型別的明明是一個位元組。
原來c語言有一個邊界對齊的特點,就是這個屬性的地址必須是4的倍數。所以這樣就會有三個位元組的地址空缺出來。
但是連續兩個char型別的屬性,這樣就會有兩個位元組的地址空缺出來。
所以c語言結構體的屬性最好可以合理安排,這樣可以節省很多記憶體出來。