列舉從字面意思理解就是將可能取的值一一枚舉出來,列舉型別沒有成員
可言,裡邊存放的是可能取值。
列舉型別的定義
enum
day;
enum
color
;
printf("%d\n",red);
printf("%d\n",green);
printf("%d\n",blue);
執行結果:
day和color都是定義的列舉型別,{}中的內容是列舉型別的可能取值,也叫列舉常量。這些可能取值都是有值的,預設從0開始,依次遞增1。在定義的時候也可以給這些列舉常量賦值。例如:
enum
color
;
執行結果:
列舉的優點
我們可以使用#define
定義常量,為什麼還要用列舉呢?
列舉的優點:
增加**的可讀性和可維護性
與#define
定義的識別符號相比,列舉有型別檢查,更加嚴謹
防止了命名汙染(封裝)
便於除錯
使用方便,一次可以定義多個常量
列舉的使用
enum color
;enum color clr = green;//只能拿列舉常量給列舉變數賦值,才不會出現型別的差異
聯合的宣告和結構類似,但它的行為方式和結構不同,聯合的成員引用的是同一塊位址空間,當你想在不同的時間將不同的資料存放到同乙個位置的時候就可以使用聯合。
聯合的定義
聯合是一種特殊的自定義型別,這種型別定義的變數包含一系列的成員,但這些成員公用同一塊位址(故也稱為共用體)。
//聯合的宣告
union un
;//聯合變數的定義
union un un;
//計算聯合變數的大小
printf("%d\n",sizeof(un));
聯合的特點union un
;union un un;
printf("%p\n",&un.i);
printf("%p\n",&un.c);
執行結果:結果表明,聯合中的成員的位址相同,即聯合的成員共用一塊空間。
un.i = 0x11223344
;un.c = 0x55
;printf("%x\n",un.i);
執行結果:我們可以用聯合來判斷電腦是大端還是小端模式,可以參考鏈結
聯合大小的計算
union un1
;union un2
;int main()
執行結果:注意:在計算聯合的大小時需要考慮記憶體對齊的問題。
下來我們來看乙個聯合和結構的組合使用,將ip位址轉為點分十進位制的表示形式。
union ip
ip;};
int main()
執行結果: 自定義型別
typedef型別 typedef 已有型別 新建型別 示例 typedef double area,volume typedef int number number i1 area a enum enum 列舉型別名 enum week 預設sun 0,可以比較 如果修改必須形如enum week...
自定義型別
下面列舉幾種c語言中常用的自定義資料型別 1.結構體型別 當描述乙個整型變數時,可以用int,描述字元型變數時,可以用char,但要描述乙個學生時,因為這個學生包含的資訊很多,比如姓名,性別,年齡等,不能通過單一的型別來描述,所以,這裡引入結構體型別,將某個事物的共有屬性集合在一起,宣告乙個結構體型...
自定義型別
struct tag 結構體型別 variable list 結構體變數 tag 結構體標籤 例如struct stu 特殊的宣告 匿名結構體型別 struct 省略結構體標籤 x 若不建立x,則無法使用該結構體結構體的不完全宣告struct b 不完全宣告 struct a struct b 結構...