C語言系列(21) 聯合體 列舉

2021-10-01 01:55:31 字數 2213 閱讀 3540

一、什麼是聯合體(共用體)

聯合體是一種特殊的資料型別,允許您在相同的記憶體位置儲存不同的資料型別。

您可以定義乙個帶有多成員的共用體,但是任何時候只能有乙個成員帶有值。

共用體提供了一種使用相同的記憶體位置的有效方式。

二、聯合體定義

union

變數名;

union

data;

//聯合體變數,變數名為data

union mydata

;//定義了乙個聯合體型別,為union mydata

union mydata data;

//定義了乙個mydata的聯合體變數,變數名為data

typedef

union mydata

;//定義了乙個聯合體型別,為union mydata,重新命名為mydata

mydata data;

//定義了乙個mydata的聯合體變數,變數名為data

三、聯合體的使用

使用定義3中定義的data變數

//共享同乙個記憶體位址

data.a =10;

//a賦值,會影響f的值

printf

("%d, %f\n"

, data.a, data.f)

;data.f =10;

//f賦值,會影響a的值

printf

("%d, %f\n"

, data.a, data.f)

;

列印輸出:

10

0.000000

1092616192

10.000000

以上示例,data.adata.f共用一段記憶體空間,給a賦值,則f同樣受到影響;給f賦值則a的值也會變化。

大端模式,是指資料的高位元組儲存在記憶體的低位址中,而資料的低位元組儲存在記憶體的高位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:位址由小向大增加,而資料從高位往低位放;這和我們的閱讀習慣一致。

小端模式,是指資料的高位元組儲存在記憶體的高位址中,而資料的低位元組儲存在記憶體的低位址中,這種儲存模式將位址的高低和資料位權有效地結合起來,高位址部分權值高,低位址部分權值低。

資料1在大端小端模式下的儲存方式:

typedef

union

myunion;

myunion u;

u.a =1;

printf

("%d, %d\n"

, u.a, u.c)

;

上述如果列印1則為小端、如果列印0則為大端

四、列舉

是乙個被命名的整型常數的集合。

列舉在日常生活中很常見,例如表示星期的sunday、monday、tuesday、wednesday、thursday、friday、saturday就是乙個列舉。

typedef

enum

week;

week week = sunday;

//定義和賦值

printf

("%d, %d, %d\n"

, sunday, monday, friday)

;// 列舉被定義後,可以當做乙個常量使用

switch

(week)

列印:

0, 1, 5

星期天

列舉和聯合體

列舉 列舉顧名思義就是一一枚舉。把可能的取值一一枚舉出來。比如,現實生活中 列舉的定義 enum day 星期 enum 性別 enum color 顏色 以上定義的 enum day,enum enum color 都是列舉型別。中的內容是列舉型別的可能取值,也叫列舉常量。這些可能取值都是有值的,...

列舉和聯合體

1 什麼是列舉 列舉顧名思義就是一一枚舉。把可能的取值一一枚舉。enum color 顏色 以上定義的 enum color 是列舉型別。中的內容是列舉型別的可能取 值,也叫列舉常量 2 列舉的值enum color 顏色 3 列舉的優點 1 增加 的可讀性和可維護性 2 和 define定義的識別...

列舉 聯合體 遞迴

一.列舉 1.列舉是乙個型別 乙個常量陣列 2.關鍵字 enum 1 enum week 3.宣告乙個enum week w 那麼sizeof w 的大小是4 w可以等於以上七個裡面中的任意乙個 只能在範圍之內賦值 預設情況下 不賦值第乙個從0開始 mon 0 tue 1 以此類推 但例如對thu進...