1 結構體
作用:在編程中我們經常要傳送的不是簡單的字節流(char型)而是多種數據結合起來的一個整體,其表現形式是一個結構體
注意事項:在結構體中定義多個數據類型時 ,如果最大的數據類型>=4字節 統一以“字”爲對齊,<4以“半字”對齊,比如
struct node
{
char a;
int b;
char c;
};
struct node link;
int count = sizeof(link);
printf(“%d\n”,count);輸出結果爲 12 把char a 與 int b互換輸出卻變成了8 因爲第一個給a分配了4個字節 char類型用去一個 剩下三個不夠int類型使用 再分配4個字節 類推,在互換之後 int 四個字節 再給char a分配時候用去一個 還能再塞進char c 所以只用去8 個字節。 如果把中間的int b換成了short b呢?按照類推應該這時候半字對齊應該是6個字節,其實這是錯誤的 這是非常特殊的一種情況 固定爲8字節。
2 共用體
定義和結構體類似,不過共用體的所用成員都在同一段內存中存放,起始地址一樣,並且同一個時刻只能使用其中的一個成員變量。
內存大小有其中最大的數據類型決定 比如int 那麼就是4個字節。
舉個例子
union node
{
char ch[2];
int num;
};
union node p;
p.num = 0;
p.ch[0] = 0;
p.ch [1] = 1;
printf("p.num = %d\n",p.num);
首先在計算機中數字以補碼形式存在 那麼四個字節中一開始放了32個0 數組是連續的 第一個字節中的8個0被p.num [0]= 0 代替 還是8個0,第二個字節中的8個0被p.ch[1] = 1代替變成7個0一個1 剩下不變,那麼32位2進制就是前面15個0加上1再加上後面16個0 也就是十進制的256.
作用:當多個類型,多個對象,多個事物只取其一,可以使用共用體。