關于C++和C的區(qū)別:
struct 結構標簽 { 類型1 標識符1; 類型2 標識符2,; 類型3 標識符3,; 類型4 標識符4; 類型5 標識符5,; },; 1、建議將struct的聲明和變量的定義分開寫,, 2,、struct內可以放任何類型的變量聲明。
對齊原則: 1,、數據成員對齊規(guī)則,。每個數據成員存儲的起始位置要從該成員大小的整數倍開始。 2,、數據成員包含結構體:結構體成員要從其內部最大元素大小的整數倍地址開始存儲,。 3、結構體的總大小:是其內部最大基本成員的整數倍,,不足的要補齊,。 union的定義: union 聯合標簽 { 類型1 標識符1; 類型2 標識符2,; 類型3 標識符3,; 類型4 標識符4; 類型5 標識符5,; },;
1,、結構體中,每個變量依次存儲,。 2,、聯合體中,每個變量都是從偏移地址零開始存儲,,每次只有一個成員存儲于該地址,。
enum 枚舉標簽{small, media =7, large =10,humungous}; 1、枚舉通過簡單的操作將一串名字和一串整型值相聯系起來,。 2,、缺省情況下,枚舉從零開始,,如果對列表中的某一個標識符賦值,,下一個標識符值比前面一個的值大1. 3、#define 定義的值在編譯時候消失,,但是枚舉定義的,,則在調試的過程任然是可見的,可以在代碼調試中使用它們,。 舉個例子: 仔細的看看,很重要,,老是用的不對,,自己給自己找麻煩的。 ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////// struct的最終大小考慮是最大的那個類型的倍數和每個都要對齊,; enum的大小考慮是最大的那個 enum是枚舉,,就是某個變量的值是能夠列舉的,比如,,星期的話就每周1到7,,月的話就1到12、而struct的話是對于某個變量是有很多數據類型構成一個總體的,,比如學生這個變量,,他需要學號,姓名,,年齡,性別等等,,這個時候就需要定義結構體了,。而uninon的話呢,其中定義的變量都只占一同塊內存,。,。,。 對于結構體:考慮要對齊和占用最大空間的元素所占空間的倍數 對于聯合體:考慮是里面所有類型數據占用空間的倍數同時還要比最大的那個還要大的最小數,就是聯合體占用的空間,,注意數組類型的處理?。?! typedef enum sizeof(ANDataType) 為 4
====================================================== sizeof(AAA) 為 結構中長度最大的變量的倍數(遵循內存對齊的原則),,如上,double 的長度為 8,, 則整個為 8*2 = 16,, 因為 char 長度為1,兩個char 為2,,仍小于8,,故按8計算,若有9個char變量,,則其中 8個char 合計為 8,,剩余一個不 足8 按 8字節(jié)計算。比如: struct
AAA ====================================================== union AAA 聯合,則以定義中最大的數據類型的長度為準,,此聯合的 size 為 8 備注: union 與 struct 的大小與其內部定義的函數無關?。?! |
|