1. 共用體
前面章節(jié)學(xué)習(xí)了結(jié)構(gòu)體,結(jié)構(gòu)體里可以按順序存放相同或者不同的數(shù)據(jù)類型,每個成員都有它對應(yīng)的存儲空間。
而共用體和結(jié)構(gòu)體一樣也可以按順序存放相同或者不同數(shù)據(jù)類型,但是與結(jié)構(gòu)體的區(qū)別是,共用體所有成員共用一個存儲空間,存儲空間由成員中存儲空間最大的來決定。
定義共用體的關(guān)鍵字: union
下面通過結(jié)構(gòu)體、共同體兩個定義代碼對比區(qū)別。
結(jié)構(gòu)體定義示例:
struct app
{
int a;
char b;
};
結(jié)構(gòu)體:每個成員是占用獨(dú)立的空間,結(jié)構(gòu)體成員之間會因?yàn)閮?nèi)存對齊產(chǎn)生間隙。
共用體定義示例:
union app
{
int a;
int b;
char c;
};
**共用體:**也稱為聯(lián)合體,采用內(nèi)存覆蓋技術(shù),每個成員共用一個內(nèi)存空間,開空間是以最大的成員開空間。 在單片機(jī)、嵌入式設(shè)備里使用較多。共用體的語法和使用方法(定義、成員變量的訪問形式等等)與結(jié)構(gòu)體一樣。
共同體案例代碼:
#include
#include
union app
{
int a;
int b;
char c;
};
//匿名方式定義,只能在定義共用體的時(shí)候就定義變量
union
{
int a;
int b;
char c;
}a1,a2,a3; //定義3個變量
union app2
{
int a;
int b;
char c;
}b1,b2;
typedef union app3
{
int a;
int b;
char c;
}c1; //c1是新的數(shù)據(jù)類型--union app3的別名
int main()
{
b1.a=65;
b1.b=66;
printf("%d\n",b1.a); //66
printf("%d\n",b1.b); //66
printf("%c\n",b1.c); //66
return 0;
}
2. 枚舉
C語言的枚舉可以給一串有序的數(shù)字集合定義名字,特別是數(shù)量較多的整數(shù)需要定義名字時(shí),比#define更加方便。特別是定義函數(shù)的返回值類型,特別方便,項(xiàng)目開發(fā)中,一般標(biāo)準(zhǔn)的函數(shù)返回值都有很多種情況,為了方便調(diào)用者判斷錯誤類型,可以把這些錯誤值全部使用枚舉定義,這樣調(diào)用者就能清楚知道每個數(shù)值代表的含義。
枚舉的定義語法:
enum枚舉名{枚舉元素1,枚舉元素2,……};
默認(rèn)成員都是從0開始,如果某一個成員被賦了值,則該成員以后的元素都以此為基礎(chǔ)遞增。
枚舉的定義及用法示例:
#include
#include
#define DEF_VAL 100
//枚舉類型
/*
枚舉內(nèi)部的是常量標(biāo)識符,這些常量標(biāo)識符就相當(dāng)于全局變量(聲明放在函數(shù)之外)
枚舉常量只能整型。
默認(rèn)情況下枚舉值是從0開始的,依次遞增。
*/
enum app
{
a1='A',a2,a3,a4
};
typedef enum app2
{
b1='A',b2,b3,b4
}type_app2;
//枚舉在程序開發(fā)中最常用的地方是:表示函數(shù)執(zhí)行的狀態(tài)值。
int main()
{
printf("%d\n",a1);
printf("%d\n",a2);
printf("%d\n",a3);
printf("%d\n",a4);
return 0;
}
type_app2 func1()
{
return b2;
}
enum app2 func2()
{
return b3;
}
枚舉應(yīng)用案例2:
#include
#include
//枚舉類型
/*
枚舉內(nèi)部的是常量標(biāo)識符,這些常量標(biāo)識符就相當(dāng)于全局變量(聲明放在函數(shù)之外)
枚舉常量只能整型。
默認(rèn)情況下枚舉值是從0開始的,依次遞增。
*/
enum app
{
a1=0, //表示OK
a2, //第一次空間申請失敗
a3, //表示第二次空間申請失敗
a4,
a5,
a6
};
//枚舉在程序開發(fā)中最常用的地方是:表示函數(shù)執(zhí)行的狀態(tài)值。
enum app func();
int main()
{
printf("%d\n",func());
return 0;
}
enum app func()
{
int *p1=NULL;
int *p2=NULL;
p1=malloc(4);
if(p1==NULL)
{
return a2; //1
}
p2=malloc(4);
if(p2==NULL)
{
return a3;//2
}
return a1; //0
}
審核編輯 黃昊宇
-
嵌入式
+關(guān)注
關(guān)注
5152文章
19676瀏覽量
317713 -
C語言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141822
發(fā)布評論請先 登錄
C語言中枚舉精講分析

C語言中枚舉的基本概念和常見用法
C語言必備知識枚舉體
什么是C語言共用體?
結(jié)構(gòu)體與共用體的區(qū)別
C語言程序設(shè)計(jì)教程之結(jié)構(gòu)體與共用體的詳細(xì)資料說明

C語言的結(jié)構(gòu)體和共用體在單片機(jī)中的妙用

什么是C語言共用體類型
C語言枚舉簡述
詳解C/C++結(jié)構(gòu)體、聯(lián)合體和枚舉的區(qū)別與內(nèi)存對齊

評論