做網(wǎng)站底色怎么選必應(yīng)站長(zhǎng)平臺(tái)
目錄
1. 聯(lián)合體
1.1 聯(lián)合體類型的聲明及特點(diǎn)
1.2 相同成員的結(jié)構(gòu)體和聯(lián)合體對(duì)比
1.3 聯(lián)合體大小的計(jì)算
1.4 聯(lián)合體的應(yīng)用舉例?
2. 枚舉類型
2.1 枚舉類型的聲明
2.2?枚舉類型的優(yōu)點(diǎn)
1. 聯(lián)合體
1.1 聯(lián)合體類型的聲明及特點(diǎn)
像結(jié)構(gòu)體一樣,聯(lián)合體也是由一個(gè)或多個(gè)成員構(gòu)成的,這些成員可以是不同類型的。
//結(jié)構(gòu)體
struct S
{char a;int b;
};//聯(lián)合體
union S
{char a;int b;
};
但是編譯器只為最大的成員分配足夠的空間。聯(lián)合體的特點(diǎn)就是所有的成員共用同一塊內(nèi)存空間。所以聯(lián)合體也叫:共用體。
個(gè)聯(lián)合體的其中一個(gè)成員賦值,其他的成員的值也跟著變化。
畫出un的內(nèi)存布局圖:
?
1.2 相同成員的結(jié)構(gòu)體和聯(lián)合體對(duì)比
#include <stdio.h>
//結(jié)構(gòu)體
struct S
{char c;int i;
};struct S s = { 0 };//聯(lián)合體
union Un
{char c;int i;
};union Un un = { 0 };
?
1.3 聯(lián)合體大小的計(jì)算
聯(lián)合體的大小至少是最大成員的大小。
當(dāng)最大成員不是最大對(duì)齊數(shù)的整數(shù)倍的時(shí)候,就要對(duì)齊到最大對(duì)齊數(shù)的整數(shù)倍。
1.4 聯(lián)合體的應(yīng)用舉例?
#include <stdio.h>int check_sys()
{union{char c;int i;}u;u.i = 1;return u.c;
}int main()
{int ret = check_sys();if (ret == 1)printf("小端\n");elseprintf("大端\n");return 0;
}
2. 枚舉類型
2.1 枚舉類型的聲明
枚舉就是把可能的取值一一列舉。
例如:月份有12個(gè)月,可以一一列舉。
#include <stdio.h>enum Sex
{MALE,FEMALE,SECRET
};enum Color
{RED,GREEN,BLUE
};
如上定義的 enum Sex,enum Color?都是枚舉類型
{}中的內(nèi)容是枚舉類型的可能取值,也叫枚舉常量。
這些可能取值都是有值的,默認(rèn)從0開始,依次遞增1
在聲明枚舉類型的時(shí)候也可以賦初值。
2.2?枚舉類型的優(yōu)點(diǎn)
枚舉的優(yōu)點(diǎn):
1. 增加代碼的可讀性和可維護(hù)性;
2. 和 #define 定義的標(biāo)識(shí)符比較,枚舉有類型檢查,更加嚴(yán)謹(jǐn);
3. 便于調(diào)試,預(yù)處理階段會(huì)刪除 #define 定義的符號(hào);
4. 使用方便,一次可以定義多個(gè)常量;
5. 枚舉常量是遵循作用域規(guī)則的,枚舉聲明在函數(shù)內(nèi),只能在函數(shù)內(nèi)使用。