文章目錄
- 一、列舉常量
- 1.列舉常量的定義
- 2.列舉常量的優點
- 二、聯合體(共用體)
- 1.聯合體型別的定義
- 1.聯合體中的變數
- 2.聯合體大小的計算
- 感謝閱讀,如有錯誤請批評指正
一、列舉常量
列舉常量顧名思義就是把可能的取值依次列舉,且這些可能的取值具有常量的屬性,
比如:
一周的星期一到星期日是有限的7天,可以依次列舉,
性別有男、女,也可以依次列舉,
月份有12個月,也可以依次列舉,
要記錄這些可能的取值,陣列當然可行,但C語言提供了一種更加方便的方式:列舉,
1.列舉常量的定義
代碼如下(示例):
enum Weekday//星期
{
Mon,//常量間用逗號分開
Tue,
Wed,
Thu,
Fri,
Sat,
Sun//注意最后一個常量后沒有逗號
};
enum Sex
{
Male,
Female
}
這些列舉常量中的常量都有對應的值,默認第一個常量從0開始,依次遞增1,當然在定義的時候也可以賦初值,
代碼如下(示例):
enum Weekday1
{
//不賦初始值,默認從0開始遞增1
Mon,//0
Tue,//1
Wed,//2
Thu,//3
Fri,//4
Sat,//5
Sun//6
};
enum Weekday2
{
//給某個常量賦初始值,則從該常量開始遞增1
//該常量之前的不受影響
Mon,//0
Tue,//1
Wed = 10,//10
Thu,//11
Fri,//12
Sat,//13
Sun//14
};
2.列舉常量的優點
我們可以使用 #define 定義常量,為什么非要使用列舉?
列舉的優點:
(1) 增加代碼的可讀性和可維護性
(2) 和#define定義的識別符號比較列舉有型別檢查,更加嚴謹
(3) 防止了命名污染(將常量封裝起來)
(4) 便于除錯
(5) 使用方便,一次可以定義多個常量
二、聯合體(共用體)
1.聯合體型別的定義
聯合體也是一種特殊的自定義型別,這種型別定義的變數也包含一系列的成員,特征是這些成員共用同一塊空間(所以聯合體也叫共用體),
代碼如下(示例):
//聯合型別的宣告
union Un
{
char c;
int i;
double d;
};
//聯合變數的定義
union Un un;
1.聯合體中的變數
由于聯合體中的變數共用同一塊空間,所以在改變其中一個值的時候會影響到其他的值,
代碼如下(示例):
union Un
{
int a;
int b;
int c;
};
int main()
{
union Un un;
//下面的三個地址均相同
printf("%d\n", &(un.a));
printf("%d\n", &(un.b));
printf("%d\n", &(un.c));
un.a = 1;
printf("%d\n", un.b);//1
printf("%d\n", un.c);//1
un.b = 2;
printf("%d\n", un.a);//2
printf("%d\n", un.c);//2
return 0;
}
2.聯合體大小的計算
聯合體的大小至少是最大成員的大小,
當最大成員大小不是最大對齊數的整數倍的時候,就要對齊到最大對齊數的整數倍,
代碼如下(示例):
union Un1
{
char c[5];
int i;
};
union Un2
{
short s[7];
int i;
};
printf("%d\n", sizeof(union Un1)); //8
//c陣列占5個位元組,對齊數為1;i變數占4個位元組,對齊數為4
//聯合體大小至少為5個位元組,對齊到最大對齊數的整數倍,即為8
printf("%d\n", sizeof(union Un2));//16
//s陣列占14個位元組,對齊數為2;i變數占4個位元組,對齊數為4
//聯合體大小至少為14個位元組,對齊到最大對齊數的整數倍,即為16
感謝閱讀,如有錯誤請批評指正
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271462.html
標籤:其他
上一篇:【物聯網】老程式教你一招,10行代碼讓超聲波模塊秒變聲控開關
下一篇:6翻了與沙漏列印
