枚舉_聯合(共用體)

枚舉
枚舉顧名思義就是一一列舉,把可能的取值列舉出來。

  • 枚舉類型定義:
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;
}

輸出結果:
這裏寫圖片描述


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章