對複合數據類型的細節瞭解

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.

作用:當多個類型,多個對象,多個事物只取其一,可以使用共用體。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章