結構體位段 列舉 聯合體(共用體)

2021-09-24 21:43:31 字數 1133 閱讀 6670

位段,c語言允許在乙個結構體中以位為單位來指定其成員所佔記憶體長度,這種以位為單位的成員稱為「位段」或稱「位域」( bit field) 。利用位段能夠用較少的位數儲存資料。

位段的宣告和結構是類似的,有兩個不同:

位段的成員必須是 int、unsigned int、 signed int、char 整形家族。

位段的成員後面有乙個冒號和數字。

struct a

;int main()

乙個位域必須儲存在同乙個位元組中,不能跨兩個位元組。如乙個位元組所剩空間不夠存放另一位域時,應從下一單元起存放該位域。也可以有意使某位域從下一單元開始。

由於位域不允許跨兩個位元組,因此位域的長度不能大於乙個位元組的長度,也就是說不能超過8位二進位。

位域可以無位網域名稱,這時它只用來作填充或調整位置。無名的位域是不能使用的。

在數學和電腦科學理論中,乙個集的列舉是列出某些有窮序列集的所有成員的程式,或者是一種特定型別物件的計數。這兩種型別經常(但不總是)重疊。 [1] 是乙個被命名的整型常數的集合,列舉在日常生活中很常見,例如表示星期的sunday、monday、tuesday、wednesday、thursday、friday、saturday就是乙個列舉。

enum day            //列舉型別

;

增加**可讀性和可維護性

和#define定義的識別符號比較列舉有型別檢查,更加嚴謹

防止命名汙染

便於除錯

使用方便,一次性可以定義多個常量。

列舉型別變數只能使用列舉常量賦值。

進行某些演算法的c語言程式設計的時候,需要把幾種不同型別的變數存放到同一段記憶體單元中。也就是利用覆蓋技術,使幾個變數互相覆蓋。這種幾個不同的變數共同占用一段記憶體的結構型別,在c語言中,被稱作「共用體」型別結構,簡稱共用體。注:在某些書籍中可能稱之為「聯合體」,但是「共用體」更能反映該型別在記憶體的特點。

union un        //    聯合型別

//聯合變數的定義

union un un;

//計算聯合型別大小

printf("%d\n",sizeof(un));

計算大小端

聯合體 位域結構體 聯合體的妙用

在c語言中,變數的定義是分配儲存空間的過程。一般的,每個變數都具有其獨有的儲存空間,那麼可不可以在同乙個記憶體空間中儲存不同的資料型別 不是同事儲存 呢?答案是可以的,使用聯合體就可以達到這樣的目的。聯合體也叫共用體,在c語言中定義聯合體的關鍵字是union。定義乙個聯合型別的一般形式為 union...

結構體,聯合體(共用體),列舉型別,位段,記憶體對齊

struct test 關鍵字 struct,表示其是乙個結構體,後面是乙個可選的標記 test 可以在分號前直接跟變數名,也可以在之後寫為struct test 變數名 strcut test 的作用類似於int 或float的宣告。若寫為 typedef strcut test test 則說明...

記憶體對齊問題(結構體,聯合體,位段)

結構體 typedef struct a a typedef struct b b typedef struct c c 對於結構體a,b,c.它們具有同樣的結構體成員,只是調換了先後順序,我們來觀察它們的大小是否相同?結果顯示在sizeof計算結構體大小時,經常得到的值比結構體成員所佔記憶體總和要...