1. 共用體
前面章節學習了結構體,結構體里可以按順序存放相同或者不同的數據類型,每個成員都有它對應的存儲空間。
而共用體和結構體一樣也可以按順序存放相同或者不同數據類型,但是與結構體的區別是,共用體所有成員共用一個存儲空間,存儲空間由成員中存儲空間最大的來決定。
定義共用體的關鍵字: union
下面通過結構體、共同體兩個定義代碼對比區別。
結構體定義示例:
struct app
{
int a;
char b;
};
結構體:每個成員是占用獨立的空間,結構體成員之間會因為內存對齊產生間隙。
共用體定義示例:
union app
{
int a;
int b;
char c;
};
**共用體:**也稱為聯合體,采用內存覆蓋技術,每個成員共用一個內存空間,開空間是以最大的成員開空間。 在單片機、嵌入式設備里使用較多。共用體的語法和使用方法(定義、成員變量的訪問形式等等)與結構體一樣。
共同體案例代碼:
#include
#include
union app
{
int a;
int b;
char c;
};
//匿名方式定義,只能在定義共用體的時候就定義變量
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是新的數據類型--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語言的枚舉可以給一串有序的數字集合定義名字,特別是數量較多的整數需要定義名字時,比#define更加方便。特別是定義函數的返回值類型,特別方便,項目開發中,一般標準的函數返回值都有很多種情況,為了方便調用者判斷錯誤類型,可以把這些錯誤值全部使用枚舉定義,這樣調用者就能清楚知道每個數值代表的含義。
枚舉的定義語法:
enum枚舉名{枚舉元素1,枚舉元素2,……};
默認成員都是從0開始,如果某一個成員被賦了值,則該成員以后的元素都以此為基礎遞增。
枚舉的定義及用法示例:
#include
#include
#define DEF_VAL 100
//枚舉類型
/*
枚舉內部的是常量標識符,這些常量標識符就相當于全局變量(聲明放在函數之外)
枚舉常量只能整型。
默認情況下枚舉值是從0開始的,依次遞增。
*/
enum app
{
a1='A',a2,a3,a4
};
typedef enum app2
{
b1='A',b2,b3,b4
}type_app2;
//枚舉在程序開發中最常用的地方是:表示函數執行的狀態值。
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;
}
枚舉應用案例2:
#include
#include
//枚舉類型
/*
枚舉內部的是常量標識符,這些常量標識符就相當于全局變量(聲明放在函數之外)
枚舉常量只能整型。
默認情況下枚舉值是從0開始的,依次遞增。
*/
enum app
{
a1=0, //表示OK
a2, //第一次空間申請失敗
a3, //表示第二次空間申請失敗
a4,
a5,
a6
};
//枚舉在程序開發中最常用的地方是:表示函數執行的狀態值。
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
}
審核編輯 黃昊宇
-
嵌入式
+關注
關注
5068文章
19019瀏覽量
303292 -
C語言
+關注
關注
180文章
7598瀏覽量
136199
發布評論請先 登錄
相關推薦
評論