C語言基礎知識彙集

指針

1.指針的大小:指針的大小和操作系統尋址範圍相關(當然編譯器也是對應版本),32位操作系統的指針就是32位
2.指針的內容:指針記錄的是申請內存的首地址
3.指針的加減運算:每次加減指針指向的數據類型的大小,如32位整型數指針每次加4,8位字符型指針每次加1。

結構體

1.結構體在內存中是連續的
2.(gcc中)結構體的大小並不是所有的元素的大小之和,而是將數據進行了調整,使其成爲最長元素的整數倍,如struct s { char a; int b; } 的大小是8;struct s { int a; double b;} 的大小爲16; struct s { char a;char b;char c;char d;int i;} 的大小是8;
其調整的策略是:
 1. 如果定義了#pragma pack(n),那麼編譯器會使用指定的n字節對齊
 2. 偏移量是成員自身大小的整數倍;
 3. 結構體大小是所有成員的整數倍;結構體大小等於最後一個成員的偏移量加最後一個結構體的大小。(結構體裏的結構體要將自身拆開)

聯合體

1.聯合體的大小取決於聯合體中佔內存最大的元素
2.聯合體中所有元素的起始地址都是聯合體的起始地址
3.對聯合體賦值會覆蓋之前的內容,聯合體中元素共用內存
發佈了51 篇原創文章 · 獲贊 21 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章