C里面比較典型的兩種數據結構就是struct和union,雖然學習的時候不會經常用,但是了解它們的基本原理對我們的幫助還是很大的
struct
在C語言中,struct其實指的就是structure,也就是結構體。它的出現就是為了便于去描述一個整體,比如一本書,當我們想要囊括它的所有性質(書名,目錄,頁數,標題等)的時候,最好的做法就是希望能把這些數據組合起來,這就是結構體。
定義一個結構體:
訪問結構體內的成員
union
union,也就是聯合,它與結構體最大的不同就是它是共用存儲空間的,定義和訪問基本與結構體一樣,這里就不做過多的贅述,主要我們來對比下兩者的區別于不同。
difference between struct and union
圖中的代碼展示的是一個struct和union,其中包括了定義、賦值和輸出;我們通過分析結果來獲取我們想要對比的內容:
第一點:struct在計算占據內存空間的時候是以4對齊的,因此5+10+4對應的是20字節,而union是共用內存空間,因此選取最大的10對應的是12字節。第二點:賦值的時候,struct是對每一個成員賦值并且互相不影響,輸出的時候,值也不會被影響到,而union輸出的結果明顯不正確,說明每次訪問的內存空間都是一樣的,后一次的賦值會覆蓋前一次的結果。
Bit Fields
typedef
typedef主要是用來給一些數據類型其別名的,比如我們如果要定義一個結構體,一般都需要寫如下的代碼:struct struct_name xxxx, 顯得很長,很麻煩,但是用typedef,比如:typedef struct struct_name FUNC,
然后,FUNC xxxx即可,這樣定義多個的時候可以節省很多時間。
另外要說明一點,就是#define與typedef的區別,這兩者之間,#define可以定義常量,而typedef必須定義類型,此外,typedef是在編譯階段去處理,而#define則是在預處理階段處理的。