1. 程式人生 > >C語言小知識點0

C語言小知識點0

今天學習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語言結構體的屬性最好可以合理安排,這樣可以節省很多記憶體出來。