《C和指標》筆記(十二) 結構和聯合

2021-09-24 03:20:36 字數 1270 閱讀 5933

qq : 1841545843

郵箱 : [email protected]

宣告結構體使用typegef建立一種新的型別

struct ****** 

typedef struct

******;

這個和宣告乙個標籤的作用相同。區別在於現在******為乙個型別而非乙個標籤。

2. 結構體的自引用

struct self_ref

// 現在b是乙個指標,而不是乙個結構

// 編譯器在結構的長度確定之前就已經知道了指標的長度

// 所以這種型別的自引用是合法的

不完整的宣告

乙個結構使用另乙個結構內部以指標的形式存在。

提出乙個問題:如果每個結構都引用了其他結構,那麼那個結構應該首先被宣告

解決方法:使用不完整宣告,它宣告乙個作為結構標籤的識別符號。

可以把這個標籤作用在不要知道這個結構長度的宣告中。

struct b;        // 不完整宣告b

struct a

struct b

// 這個是a中有b, b中有a

結構的儲存分配

struct align

// 整形值長度為4個位元組,並且它的其實存貯位置必須被4整除

// // |a| | | |b|b|b|b|c| | | |

// 系統禁止編譯器在結構的起始位置跳過幾個位元組來滿足邊界對其的要求,

// 因此所有結構的起始儲存位置必須是結構中邊界要求最嚴格的資料型別所要求的位置

// 可以對結構中的成員列表重新排列,讓那些對邊界要求最嚴格的成員首次出現

// 對邊界要求弱的最後出現

// sizeof 能夠得出乙個結構的整體長度,包括因邊界對齊而跳過的那些位元組

聯合的所有成員引用的是記憶體中的相同的位置。

union  fi;

使用聯合將值和型別放到一起

struct variable type;

union value

}// type 決定了記憶體如何被訪問

// 如果聯合的各個成員具有不同的長度,聯合的長度就是它最長成員的長度。

// 聯合初始化的初始值必須是第乙個型別

// 為節省空間,有一種好辦法是在聯合中儲存指向不同成員的指標而不是直接儲存成員本身

C和指標(7)結構和聯合

第10章 1 聚合資料型別能夠同時儲存超過乙個的單獨資料。c提供了兩種型別的聚合資料型別,陣列和結構。陣列是相同型別的元素的集合,它的每個元素是通過下標引用或指標間接訪問來選擇的 因為陣列的元素長度相同 2 結構也是一些值得的集合,這些值稱為它的成員,但乙個結構的各個成員可能長度不同,故不能使用下標...

C和指標詳解 結構和聯合

結構的自引用struct self這種自引用是非法的。因為成員b是另乙個完整的結構體,其內部還將包含它自己的成員b。這樣永無止境的重複下去。struct self這樣就是合法的了。作為函式引數的結構 雖然將乙個結構變數作為引數是合法的,但是這樣往往並不適宜。傳遞乙個結構體。它的效率很低,因為在c語言...

C和指標 第10章 結構和聯合

1.結構 struct x struct y 20 z 警告 以上兩個宣告被編譯器當做兩個截然不同的型別。即y和z為同一型別,但與x型別不用。使用結構標籤宣告結構 struct 此時 是結構標籤,使用標籤建立需要如下 struct x struct y 20 z 使用typedef定義乙個新型別 t...