21天学通C语言-学习笔记(12)
結(jié)構(gòu)體、共用體、枚舉和位域
結(jié)構(gòu)體聲明、定義與存儲(chǔ)形式
-
結(jié)構(gòu)體在C語言中用于處理多個(gè)單一數(shù)據(jù)組成的數(shù)據(jù)集合。一個(gè)結(jié)構(gòu)體可以將多個(gè)單一信息結(jié)合在一起作為一個(gè)整體來使用。與整型等簡(jiǎn)單數(shù)據(jù)類型一樣,使用前需要進(jìn)行聲明:
struct 結(jié)構(gòu)體名{ 數(shù)據(jù)類型1 結(jié)構(gòu)體成員1; 數(shù)據(jù)類型2 結(jié)構(gòu)體成員2; 數(shù)據(jù)類型3 結(jié)構(gòu)體成員3;
… };這個(gè)數(shù)據(jù)類型名稱為:struct 結(jié)構(gòu)體名 -
聲明之后,便可以使用該類型來定義結(jié)構(gòu)體變量:struct 結(jié)構(gòu)體名 變量名
-
結(jié)構(gòu)體的存儲(chǔ)形式:一般的系統(tǒng)中,為了尋址的方便,數(shù)據(jù)在內(nèi)存中存儲(chǔ)時(shí),一般以其本身數(shù)據(jù)類型的字節(jié)長(zhǎng)度為基本單位對(duì)齊。而結(jié)構(gòu)體數(shù)據(jù)在存儲(chǔ)時(shí)是以其中字節(jié)長(zhǎng)度最大的成員的字節(jié)數(shù)為基本單位對(duì)齊的。結(jié)構(gòu)體中的成員分配的內(nèi)存空間是相鄰的。
-
為了提高程序可讀性,最好在 main 函數(shù)外聲明結(jié)構(gòu)體數(shù)據(jù)類型。
結(jié)構(gòu)體的應(yīng)用
結(jié)構(gòu)體名.結(jié)構(gòu)體成員名;
結(jié)構(gòu)體數(shù)組
結(jié)構(gòu)體數(shù)組就是結(jié)構(gòu)體類型變量為數(shù)組元素的數(shù)組。定義和初始化方法同上。
結(jié)構(gòu)體指針
聲明一個(gè)結(jié)構(gòu)體指針變量,然后再將變量初始化為一個(gè)存儲(chǔ)結(jié)構(gòu)體數(shù)據(jù)的內(nèi)存空間的首地址后,便可以使用這個(gè)指針來訪問結(jié)構(gòu)體了。
結(jié)構(gòu)體小結(jié)
結(jié)構(gòu)體的名稱較長(zhǎng),可以使用 typedef 來得到簡(jiǎn)化的別名。
最好不要使用對(duì)于含有指針性成員的結(jié)構(gòu)體變量作為函數(shù)形參或返回值。
共用體
顧名思義,共用體可以使幾個(gè)不同成員共享同一塊內(nèi)存。優(yōu)點(diǎn):節(jié)省內(nèi)存空間,簡(jiǎn)化復(fù)雜數(shù)據(jù)的處理。
首先聲明:union 共用體名{
數(shù)據(jù)類型名 成員名1;
數(shù)據(jù)類型名 成員名2;
數(shù)據(jù)類型名 成員名3;
…
};
一個(gè)共用體類型的字節(jié)長(zhǎng)度為占用內(nèi)存空間最多的成員變量的字節(jié)長(zhǎng)度。
然后定義:使用聲明后的共用體類型定義共用體變量。
注意:由于共用體變量實(shí)際上只有一個(gè)有效成員,所以只能使用含一個(gè)值的序列進(jìn)行初始化;另外,不可以直接為共用體變量進(jìn)行賦值,需要通過賦值其成員來改變共用體的賦值空間;由于共用體中的所有成員共享一塊空間,因此,對(duì)任意成員的賦值都會(huì)影響其他成員的值,也不要在共用體中包含指針成員,尤其不要包含指向堆空間的指針成員。
枚舉
枚舉類型是一組相關(guān)數(shù)據(jù)的集合,它可以在定義常量的同時(shí),將這些常量結(jié)合在一個(gè)集中加強(qiáng)彼此的關(guān)系。其聲明如下:
enum 枚舉類型名{
枚舉成員1;
枚舉成員2;
枚舉成員3;
…
}
定義:enum 枚舉類型名 枚舉變量 = 常量;
位域
主要處理占用一個(gè)或幾個(gè)二進(jìn)制位的信息,它允許在結(jié)構(gòu)體內(nèi)以位為單位將其空間劃分為多個(gè)區(qū)域,并將其分配給結(jié)構(gòu)體的各個(gè)成員。形式如下:
struct 結(jié)構(gòu)體名 {
unsigned 位域成員1:常量1;
unsigned 位域成員2:常量2;
int 位域成員3:常量3;
int 位域成員4:常量4;
…
};
位域成員的類型只能是 int 型或 unsigned 型。常量值指定了該區(qū)域所占的位數(shù),且該數(shù)值不能大于其數(shù)據(jù)類型所占位數(shù)。
存儲(chǔ)形式:正常情況下,位域中的位域成員的內(nèi)存是相鄰的。但是,如果位域成員所占空間是不能跨兩個(gè)基本位域單元的。
以上就是三種高級(jí)數(shù)據(jù)類型:結(jié)構(gòu)體、共用體和枚舉了。本章學(xué)習(xí)的數(shù)據(jù)類型的名稱都較長(zhǎng),可以使用 typedef 來得到簡(jiǎn)化的別名。
總結(jié)
以上是生活随笔為你收集整理的21天学通C语言-学习笔记(12)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java开发高端说法_关于Java代码的
- 下一篇: bison实例