1. 共用體
前面章節(jié)學(xué)習(xí)了結(jié)構(gòu)體,結(jié)構(gòu)體里可以按順序存放相同或者不同的數(shù)據(jù)類型,每個(gè)成員都有它對(duì)應(yīng)的存儲(chǔ)空間。
而共用體和結(jié)構(gòu)體一樣也可以按順序存放相同或者不同數(shù)據(jù)類型,但是與結(jié)構(gòu)體的區(qū)別是,共用體所有成員共用一個(gè)存儲(chǔ)空間,存儲(chǔ)空間由成員中存儲(chǔ)空間最大的來決定。
定義共用體的關(guān)鍵字: union
下面通過結(jié)構(gòu)體、共同體兩個(gè)定義代碼對(duì)比區(qū)別。
結(jié)構(gòu)體定義示例:
struct app
{
int a;
char b;
};
結(jié)構(gòu)體:每個(gè)成員是占用獨(dú)立的空間,結(jié)構(gòu)體成員之間會(huì)因?yàn)閮?nèi)存對(duì)齊產(chǎn)生間隙。
共用體定義示例:
union app
{
int a;
int b;
char c;
};
**共用體:**也稱為聯(lián)合體,采用內(nèi)存覆蓋技術(shù),每個(gè)成員共用一個(gè)內(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個(gè)變量
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)用者判斷錯(cuò)誤類型,可以把這些錯(cuò)誤值全部使用枚舉定義,這樣調(diào)用者就能清楚知道每個(gè)數(shù)值代表的含義。
枚舉的定義語法:
enum枚舉名{枚舉元素1,枚舉元素2,……};
默認(rèn)成員都是從0開始,如果某一個(gè)成員被賦了值,則該成員以后的元素都以此為基礎(chǔ)遞增。
枚舉的定義及用法示例:
#include
#include
#define DEF_VAL 100
//枚舉類型
/*
枚舉內(nèi)部的是常量標(biāo)識(shí)符,這些常量標(biāo)識(shí)符就相當(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)識(shí)符,這些常量標(biāo)識(shí)符就相當(dāng)于全局變量(聲明放在函數(shù)之外)
枚舉常量只能整型。
默認(rèn)情況下枚舉值是從0開始的,依次遞增。
*/
enum app
{
a1=0, //表示OK
a2, //第一次空間申請(qǐng)失敗
a3, //表示第二次空間申請(qǐng)失敗
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)注
5085文章
19138瀏覽量
305731 -
C語言
+關(guān)注
關(guān)注
180文章
7605瀏覽量
137001
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論