C語言自定義類型超詳細(xì)梳理之結(jié)構(gòu)體枚舉聯(lián)合體_第1頁
C語言自定義類型超詳細(xì)梳理之結(jié)構(gòu)體枚舉聯(lián)合體_第2頁
C語言自定義類型超詳細(xì)梳理之結(jié)構(gòu)體枚舉聯(lián)合體_第3頁
C語言自定義類型超詳細(xì)梳理之結(jié)構(gòu)體枚舉聯(lián)合體_第4頁
C語言自定義類型超詳細(xì)梳理之結(jié)構(gòu)體枚舉聯(lián)合體_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第C語言自定義類型超詳細(xì)梳理之結(jié)構(gòu)體枚舉聯(lián)合體//結(jié)構(gòu)體自引用

//這個節(jié)點能夠找到同類型的下一個節(jié)點,這就叫結(jié)構(gòu)體的自引用,我自己能找到同類型跟自己同類型的下一個元素就叫結(jié)構(gòu)體的自引用。

//結(jié)構(gòu)體的自引用實現(xiàn):在結(jié)構(gòu)體里面包含同類型的結(jié)構(gòu)體的指針。

4.結(jié)構(gòu)體的內(nèi)存對齊

首先得掌握結(jié)構(gòu)體的對齊規(guī)則:

1.第一個成員在與結(jié)構(gòu)體變量偏移量為0的地址處。

2.其他成員變量要對齊到某個數(shù)字(對齊數(shù))的整數(shù)倍的地址處。對齊數(shù)=編譯器默認(rèn)的一個對齊數(shù)與該成員大小的較小值。VS中默認(rèn)的值為8

3.結(jié)構(gòu)體總大小為最大對齊數(shù)(每個成員變量都有一個對齊數(shù))的整數(shù)倍。

4.如果嵌套了結(jié)構(gòu)體的情況,嵌套的結(jié)構(gòu)體對齊到自己的最大對齊數(shù)的整數(shù)倍處,結(jié)構(gòu)體的整體大小就是所有最大對齊數(shù)(含嵌套結(jié)構(gòu)體的對齊數(shù))的整數(shù)倍。

我們來算一下上面結(jié)構(gòu)體S內(nèi)存大小為什么是12個字節(jié)

我用到編譯器是vs,vs編譯器的默認(rèn)對齊數(shù)是8.

1.結(jié)構(gòu)體的第一個成員,放在結(jié)構(gòu)體變量在內(nèi)存中儲存位置的0偏移處開始。

2.從第二個成員往后的所有成員,都放在一個對齊數(shù)(成員的大小和默認(rèn)對齊數(shù)的較小值)的整數(shù)的整數(shù)倍的地址處。

3.結(jié)構(gòu)體的總大小是結(jié)構(gòu)體的所有成員的對齊數(shù)中最大的那個對齊數(shù)的整數(shù)倍。

5.結(jié)構(gòu)體位段

位段的聲明和結(jié)構(gòu)是類似的,有兩個不同:

1.位段的成員必須是int、unsignedint或signedint。

2.位段的成員名后邊有一個冒號和一個數(shù)字。

假設(shè)我們用二進制的方式來表示性別,分為男、女、保密??梢杂?0、01、10分別表示。這樣我們連一個字節(jié)的大小都用不到,但如果我們創(chuàng)建變量,一個int變量就占四個字節(jié),所以說位段在一定程度上節(jié)省了空間。

位段的內(nèi)存分配

1.位段的成員可以是intunsignedintsignedint或者是char(屬于整形家族)類型

2.位段的空間上是按照需要以4個字節(jié)(int)或者1個字節(jié)(char)的方式來開辟的。

3.位段涉及很多不確定因素,位段是不跨平臺的,注重可移植的程序應(yīng)該避免使用位段。

二、什么是枚舉

性別有:男、女、保密,也可以一一列舉。

月份有12個月,也可以一一列舉

這里就可以使用枚舉了。

枚舉是要創(chuàng)造出一種新的類型,這種類型的取值是非常有限的,明確的只有那么幾種可能取值,我們就可以用枚舉來創(chuàng)造一個枚舉類型

枚舉類型的大小就是4.

1.枚舉類型的定義

#includestdio.h

//聲明枚舉類型

enumColor//enum枚舉關(guān)鍵字,Color枚舉類型,

RED,//大括號里面放的是枚舉的可能取值(常量)

GREEN,

BLUE

intmain()

enumColorc=BLUE;

return0;

}

大括號里面這些可能取值都是有值的,默認(rèn)從0開始,一次遞增1,當(dāng)然在定義的時候也可以賦初值。

enumColor//顏色

RED=1,

GREEN=2,

BLUE=4

};

2.枚舉的優(yōu)點

我們可以使用#define定義常量,為什么非要使用枚舉?

枚舉的優(yōu)點:

1.增加代碼的可讀性和可維護性

2.和#define定義的標(biāo)識符比較枚舉有類型檢查,更加嚴(yán)謹(jǐn)。

3.防止了命名污染(封裝)

4.便于調(diào)試

5.使用方便,一次可以定義多個常量

三、聯(lián)合(共用體)

1.什么是聯(lián)合(共用體)

聯(lián)合也是一種特殊的自定義類型這種類型定義的變量也包含一系列的成員,特征是這些成員公用同一塊空間(所以聯(lián)合也叫共用體)。

2.聯(lián)合(共用體)的定義

//聯(lián)合類型的聲明

unionUn

charc;

inti;

//聯(lián)合變量的定義

unionUnun;

//計算連個變量的大小

printf("%d\n",sizeof(un));

計算聯(lián)合(共用體)的大小

這里為什么算出的結(jié)果是4呢,我們看下圖:

聯(lián)合的成員是共用同一塊內(nèi)存空間的,這樣一個聯(lián)合變量的大小,至少是最大成員的大?。ㄒ驗槁?lián)合至少得有能力保存最大的那個成員)。

3.聯(lián)合(共用體)的初始化

#includestdio.h

unionUn

charc;

inti;

intmain()

unionUnu={10};//初始化

u.i=1000;//成員變量單獨初始化

u.c=100;

printf("%p\n",u);

printf("%p\n",(u.c));

printf("%p\n",(u.i));

return0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論