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ì)齊) |
| 成員訪(fǎng)問(wèn) | 同一時(shí)間只能有效訪(fǎng)問(wèn)一個(gè)成員 | 可同時(shí)訪(fǎng)問(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)文章
詳解C++程序中定義struct結(jié)構(gòu)體的方法
C++中同樣擁有C語(yǔ)言中的結(jié)構(gòu)體,下面就來(lái)詳解C++程序中定義struct結(jié)構(gòu)體的方法,需要的朋友可以參考下2016-05-05
C++中String增刪查改模擬實(shí)現(xiàn)方法舉例
這篇文章主要給大家介紹了關(guān)于C++中String增刪查改模擬實(shí)現(xiàn)方法的相關(guān)資料,String是C++中的重要類(lèi)型,程序員在C++面試中經(jīng)常會(huì)遇到關(guān)于String的細(xì)節(jié)問(wèn)題,甚至要求當(dāng)場(chǎng)實(shí)現(xiàn)這個(gè)類(lèi),需要的朋友可以參考下2023-11-11
C++ explicit關(guān)鍵字的應(yīng)用方法詳細(xì)講解
C++ explicit關(guān)鍵字用來(lái)修飾類(lèi)的構(gòu)造函數(shù),表明該構(gòu)造函數(shù)是顯式的,既然有"顯式"那么必然就有"隱式",那么什么是顯示而什么又是隱式的呢?下面就讓我們一起來(lái)看看這方面的知識(shí)吧2013-09-09
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易網(wǎng)絡(luò)聊天室
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易網(wǎng)絡(luò)聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
C語(yǔ)言中枚舉與聯(lián)合體的使用方法(enum union)
枚舉的意思就是列舉,將每一個(gè)可能的取值都進(jìn)行一一列舉,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中枚舉與聯(lián)合體的使用方法,需要的朋友可以參考下2021-09-09
C++使用郵件槽實(shí)現(xiàn)ShellCode跨進(jìn)程傳輸
在計(jì)算機(jī)安全領(lǐng)域,進(jìn)程間通信(IPC)一直是一個(gè)備受關(guān)注的話(huà)題,在本文中,我們將探討如何使用Windows郵件槽(Mailslot)實(shí)現(xiàn)ShellCode的跨進(jìn)程傳輸,需要的可以參考下2023-12-12
利用C++11原子量如何實(shí)現(xiàn)自旋鎖詳解
當(dāng)自旋鎖嘗試獲取鎖時(shí)以忙等待(busy waiting)的形式不斷地循環(huán)檢查鎖是否可用,下面這篇文章主要給大家介紹了關(guān)于利用C++11原子量如何實(shí)現(xiàn)自旋鎖的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-06-06

