C語(yǔ)言中共用體和枚舉的實(shí)現(xiàn)
一、共用體(聯(lián)合體)
1.共用體的定義與聲明
- 共用體的定義
union 類(lèi)型名
{
數(shù)據(jù)類(lèi)型 成員變量1;
數(shù)據(jù)類(lèi)型 成員變量2;
數(shù)據(jù)類(lèi)型 成員變量3;
數(shù)據(jù)類(lèi)型 成員變量4;
...
}- 共用體的聲明
和結(jié)構(gòu)體一樣,共用體變量聲明有 3 種常見(jiàn)形式:
// 方式1:定義后單獨(dú)聲明
union Data
{
int i;
char c;
float f;
};
union Data a, b;
// 方式2:定義時(shí)聲明變量
union Data2
{
int x;
double y;
} c, d;
// 方式3:匿名共用體(僅使用一次,無(wú)名稱(chēng))
union
{
char ch;
short s;
} e;2.共用體的特征
- 共用體每個(gè)成員變量的內(nèi)存空間都是共享的
- 共用體也會(huì)用于函數(shù)參數(shù)的傳遞
- 共用體的大小,是最大成員變量的大小
3.共用體的應(yīng)用
1.大小端判斷
#include <stdio.h>
union DATA
{
int a;
char c;
};
int main()
{
union DATA data;
data.a = 0x12345678;
if(0x78 == data.c)
{
printf("little end\n");
}
else
{
printf("big end\n");
}
return 0;
}2.作為函數(shù)的參數(shù)傳遞的時(shí)候的不同選項(xiàng)(EPOLL)
4.共用體與結(jié)構(gòu)體的區(qū)別
| 特性 | 共用體(Union) | 結(jié)構(gòu)體(Struct) |
|---|---|---|
| 內(nèi)存分配 | 所有成員共享同一塊內(nèi)存 | 成員各自占用獨(dú)立內(nèi)存,總大小 = 各成員大小之和(含對(duì)齊) |
| 成員訪問(wèn) | 同一時(shí)間只能有效訪問(wèn)一個(gè)成員 | 可同時(shí)訪問(wèn)所有成員 |
| 大小計(jì)算 | 總大小 = 最大成員的大?。ê瑢?duì)齊) | 總大小 = 各成員大小之和(含對(duì)齊) |
| 用途 | 節(jié)省內(nèi)存、類(lèi)型轉(zhuǎn)換 | 組合不同類(lèi)型數(shù)據(jù),描述復(fù)雜對(duì)象 |
二、枚舉
1.枚舉的定義與聲明
枚舉:約定變量的取值范圍。比如月份、周幾。
//枚舉值當(dāng)常量值看,類(lèi)型為整形(int)
enum 類(lèi)型名 {枚舉值1,枚舉值2, 枚舉值3,枚舉值4 ,枚舉值5, 枚舉值6, ... };
//MON如果沒(méi)有指定值,那么它的值就是0,后面枚舉值就在一個(gè)的值的基礎(chǔ)上+1
enum WEEK {MON, TUE, WED, THU, FRI, SAT, SUN};
//當(dāng)然也可一給每個(gè)枚舉值賦新值進(jìn)去
enum WEEK {MON,TUE=3,WED=4,THU=5,FRI=6,SAT,SUN};關(guān)鍵規(guī)則:
- 枚舉常量的值必須是整數(shù)(不能是浮點(diǎn)數(shù)、字符串)。
- 允許不同枚舉常量賦值相同(但不推薦,失去唯一性)。
- 未顯式賦值的成員,值為 “前一個(gè)成員的值 + 1”。
2.枚舉的應(yīng)用
- 和 switch 搭配使用
- 提高代碼的可閱讀性
代碼示例:
#include <stdio.h>
enum WEEK {MON, TUE, WED, THU, FRI, SAT, SUN};
typedef enum
{
JAN,
FEB,
MARCH,
APRI,
MAY,
JU,
JULY,
}MONTH;
int main()
{
enum WEEK week;
MONTH mon = MAY;
int num = 0;
printf("input num (0~6):");
scanf("%d", &num);
week = num;
switch(week)
{
case MON:
printf("go to school\n");
break;
case TUE:
printf("go to swim\n");
break;
case WED:
printf("go to read\n");
break;
case THU:
printf("go to study\n");
break;
case FRI:
printf("go to pao dao\n");
break;
case SAT:
printf("go to da wa\n");
break;
case SUN:
printf("go to sleep\n");
break;
default:
printf("I don't know\n");
}
}到此這篇關(guān)于C語(yǔ)言中共用體和枚舉的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)C語(yǔ)言 共用體和枚舉內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Qt實(shí)現(xiàn)界面滑動(dòng)切換效果的思路詳解
這篇文章主要介紹了Qt實(shí)現(xiàn)界面滑動(dòng)切換效果,主要包括設(shè)計(jì)思路及主要函數(shù)講解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
C語(yǔ)言用指針函數(shù)尋找數(shù)組中的最大值與次大值
這篇文章主要給大家介紹了關(guān)于C語(yǔ)言用指針函數(shù)尋找數(shù)組中的最大值與次大值的相關(guān)資料,該代碼通過(guò)定義一個(gè)名為L(zhǎng)argestTow的函數(shù)來(lái)找出數(shù)組中的最大值和次大值,并將結(jié)果分別存入指針?biāo)赶虻膬?nèi)存單元中,需要的朋友可以參考下2024-11-11
C++實(shí)現(xiàn)LeetCode(60.序列排序)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(60.序列排序),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
剖析C++編程中friend關(guān)鍵字所修飾的友元函數(shù)和友元類(lèi)
這篇文章主要介紹了剖析C++編程中friend關(guān)鍵字所修飾的友元函數(shù)和友元類(lèi),友元了以后在外部就可以訪問(wèn)到正常情況下無(wú)法訪問(wèn)到的私有屬性和方法,需要的朋友可以參考下2016-01-01
Qt實(shí)現(xiàn)自定義驗(yàn)證碼輸入框控件的方法
本文主要介紹了Qt實(shí)現(xiàn)自定義驗(yàn)證碼輸入框控件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
C++實(shí)現(xiàn)LeetCode(137.單獨(dú)的數(shù)字之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(137.單獨(dú)的數(shù)字之二),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
使用?Visual?Studio?2022?開(kāi)發(fā)?Linux?C++?應(yīng)用程序的過(guò)程詳解
Visual?Studio?2022?引入了用于?Linux?C++?開(kāi)發(fā)的本機(jī)?WSL2?工具集,可以構(gòu)建和調(diào)試?Linux?C++?代碼,并提供了非常好的?Linux?文件系統(tǒng)性能、GUI?支持和完整的系統(tǒng)調(diào)用兼容性,這篇文章主要介紹了使用Visual?Studio?2022?開(kāi)發(fā)?Linux?C++?應(yīng)用程序,需要的朋友可以參考下2021-11-11

