枚舉
枚舉顧名思義就是一一列舉,把可能的取值列舉出來。
- 枚舉類型定義:
enum Day//星期
{
Mon,
Tuse,
Wed,
Thur,
Fir,
Sat,
Sun
};
enum Color//顏色
{
RED,
GREEN,
BLUE
};
以上的定義的兩個enum Day,enum Color都是枚舉類型。
{ }中的內容是枚舉類型的肯能取值,也叫枚舉常量,這些可能取值都是是有值的,默認從0開始,一次遞增1,當然在定義的時候也可以賦初值。如以下:
enum Color//顏色
{
RED=1,
GREEN=2,
BLUE=3
};
枚舉的優點:
1.增加代碼的可讀性和可維護性。
2.和#define定義的標識符比較,枚舉有類型檢查,更加嚴謹。
3.防止命名污染(封裝)。
4.便於調試。
5.使用方便,一次可以定義多個常量。枚舉的使用
enum Color//顏色
{
RED=1,
GREEN=2,
BLUE=3
};
enum Color clr = GREEN;//只能用枚舉常量給枚舉變量賦值,纔不會出現類型的差異
clr = 4;
聯合(共用體 )
- 聯合類型定義:
聯合是一種特殊的自定義類型,這種類型定義的變量也包含一系列的成員,特徵是這些成員共用同一塊空間,所以聯合也叫共用體。
例:
union Un
{
char c;
int i;
};
union Un un;//聯合變量的定義
printf("%d\n", sizeof(un));
//輸出結果爲4,由於char和int類型共用同一塊空間
- 聯合的特點:
1.聯合的成員是共用同一塊內存空間的,這樣一個聯合變量的大小,至少是最大成員的大小(因爲聯合至少得有能力保存最大的那個成員)。
2.當最大成員大小不是最大對齊數的整數倍時,就要對齊到最大對齊數的整數倍。
例:
#include <stdio.h>
union Un1
{
char c[5];
int i;
};
union Un2
{
short c[7];
int i;
};
int main()
{
printf("%d\n", sizeof(union Un1));//8
printf("%d\n", sizeof(union Un2));//16
system("pause");
return 0;
}
- 聯合體和結構體的巧妙使用:
//將long類型的IP地址,轉化爲點分十進制的表示形式
#include <stdio.h>
union Ip_addr
{
unsigned long addr;
struct
{
unsigned char c1;
unsigned char c2;
unsigned char c3;
unsigned char c4;
}Ip;
};
int main()
{
union Ip_addr my_Ip;
my_Ip.addr = 127555555;
printf("%d.%d.%d.%d\n", my_Ip.Ip.c1, my_Ip.Ip.c2, my_Ip.Ip.c3, my_Ip.Ip.c4);
system("pause");
return 0;
}
輸出結果: