第九章 結(jié)構(gòu)體、共用體與枚舉類(lèi)型_第1頁(yè)
第九章 結(jié)構(gòu)體、共用體與枚舉類(lèi)型_第2頁(yè)
第九章 結(jié)構(gòu)體、共用體與枚舉類(lèi)型_第3頁(yè)
第九章 結(jié)構(gòu)體、共用體與枚舉類(lèi)型_第4頁(yè)
第九章 結(jié)構(gòu)體、共用體與枚舉類(lèi)型_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第九章結(jié)構(gòu)體、共用體

與枚舉類(lèi)型張樂(lè)樂(lè)C語(yǔ)言程序設(shè)計(jì)19.1.1結(jié)構(gòu)體類(lèi)型的定義

struct

結(jié)構(gòu)體名

{

數(shù)據(jù)類(lèi)型1成員名1;

數(shù)據(jù)類(lèi)型2成員名2;……

數(shù)據(jù)類(lèi)型n成員名n;

};/*此行的分號(hào)不能少*/結(jié)構(gòu)體類(lèi)型定義的一般形式:

struct為關(guān)鍵字;結(jié)構(gòu)體名是用戶(hù)定義的類(lèi)型標(biāo)識(shí)。{}中是組成該結(jié)構(gòu)體的成員。成員的數(shù)據(jù)類(lèi)型可以是C語(yǔ)言所允許的任何數(shù)據(jù)類(lèi)型。29.1.1結(jié)構(gòu)體類(lèi)型的定義

structstudent {

longnum; charname[20]; charsex; intage; floatscore; charaddr[30]; };[例9.1]:定義學(xué)生檔案信息結(jié)構(gòu)類(lèi)型:成員表列

struct是類(lèi)型關(guān)鍵字后分號(hào)不能少,表明語(yǔ)句結(jié)束。結(jié)構(gòu)體名39.1.1結(jié)構(gòu)體類(lèi)型的定義

2.結(jié)構(gòu)體類(lèi)型特點(diǎn):

(1)結(jié)構(gòu)體類(lèi)型由多個(gè)成員組成,成員的數(shù)據(jù)類(lèi)型可以是整型、實(shí)型、字符型、數(shù)組

,也允許是另一個(gè)已經(jīng)定義的結(jié)構(gòu)體類(lèi)型。

(2)結(jié)構(gòu)體類(lèi)型系統(tǒng)沒(méi)有預(yù)先定義,凡需要使用結(jié)構(gòu)體類(lèi)型數(shù)據(jù)的,都必須在程序中自己定義??筛鶕?jù)設(shè)計(jì)者的需要來(lái)組合的。

(3)定義一個(gè)結(jié)構(gòu)體類(lèi)型,系統(tǒng)不會(huì)為其分配內(nèi)存單元。定義一個(gè)類(lèi)型只是表示這個(gè)類(lèi)型的結(jié)構(gòu),即告訴系統(tǒng)它由哪些類(lèi)型的成員構(gòu)成,各占多少個(gè)字節(jié),各按什么形式存儲(chǔ),并把它們當(dāng)作一個(gè)整體來(lái)處理。49.1.2結(jié)構(gòu)體變量

----(1)先定義結(jié)構(gòu)體類(lèi)型再定義變量名語(yǔ)法格式:struct結(jié)構(gòu)體名

變量名表;例如:

structdatedate1;structstudents,t1,t2;按照結(jié)構(gòu)體類(lèi)型的組成,系統(tǒng)為定義的結(jié)構(gòu)體變量分配內(nèi)存單元。結(jié)構(gòu)體變量的各個(gè)成員在內(nèi)存中占用連續(xù)存儲(chǔ)區(qū)域,結(jié)構(gòu)體變量所占內(nèi)存大小為結(jié)構(gòu)體中每個(gè)成員所占用內(nèi)存的長(zhǎng)度之和。structstudentnum4個(gè)字節(jié)name20個(gè)字節(jié)sex1個(gè)字節(jié)age2個(gè)字節(jié)addr30個(gè)字節(jié)score4個(gè)字節(jié)59.1.2結(jié)構(gòu)體變量

----(2)

在定義類(lèi)型的同時(shí)定義變量語(yǔ)法格式:例如:

structstudent

{charnum[8],name[20],sex;intage;floatscore;

}st1,st2;

struct結(jié)構(gòu)體名

{

成員定義表;

}變量名表;69.1.2結(jié)構(gòu)體變量

----(3)直接定義結(jié)構(gòu)類(lèi)型變量語(yǔ)法格式:

例如:

struct{charnum[8],name[20],sex;intage;floatscore;

}a,b,c;

struct{

成員定義表;

}變量名表;在struct后不出現(xiàn)結(jié)構(gòu)體名,因此也不能再以此定義相同的結(jié)構(gòu)體變量。79.1.3結(jié)構(gòu)體變量的引用對(duì)于結(jié)構(gòu)體變量,要通過(guò)成員運(yùn)算符“.”,逐個(gè)訪(fǎng)問(wèn)其成員,訪(fǎng)問(wèn)的格式為:

結(jié)構(gòu)變量名.成員

例如,structstudentst1,st2;st1.num,

引用結(jié)構(gòu)變量st1中的num成員;引用結(jié)構(gòu)變量st1中的name成員,引用結(jié)構(gòu)變量st2中的name成員,也可以引用結(jié)構(gòu)體變量以及變量成員的地址例如,&st1&其中的“.”是成員運(yùn)算符89.1.3結(jié)構(gòu)體變量的引用如果某成員本身又是一個(gè)結(jié)構(gòu)類(lèi)型,則只能通過(guò)多級(jí)的分量運(yùn)算,對(duì)最低一級(jí)的成員進(jìn)行引用。此時(shí)的引用格式擴(kuò)展為:

結(jié)構(gòu)變量名.成員.子成員.….最低一級(jí)子成員例如,引用結(jié)構(gòu)變量st1中的birthday成員的格式分別為:st1.birthday.yearst1.birthday.monthst1.birthday.day99.1.4結(jié)構(gòu)體變量的初始化【例】結(jié)構(gòu)體變量的初始化

structdate{intyear,month,day;};

structstudent{charnum[8],name[20],sex;structdatebirthday;floatscore;}a={“0406011","Liming",'M',{1977,12,9},83},b={“0408025","Zhangliming",'F',{1978,5,10},87},c;

如果初值個(gè)數(shù)少于結(jié)構(gòu)體成員個(gè)數(shù),則將無(wú)初值對(duì)應(yīng)的成員賦以0值。

如果初值個(gè)數(shù)多于結(jié)構(gòu)體成員個(gè)數(shù),則編譯出錯(cuò)。109.5共用體結(jié)構(gòu)體類(lèi)型解決了如何描述一個(gè)邏輯上相關(guān),但數(shù)據(jù)類(lèi)型不同的一組分量的集合。在需要節(jié)省內(nèi)存儲(chǔ)空間時(shí),c語(yǔ)言還提供了一種由若干個(gè)不同類(lèi)型的數(shù)據(jù)項(xiàng)組成,但共享同一存儲(chǔ)空間的構(gòu)造類(lèi)型。共用體——一種構(gòu)造類(lèi)型數(shù)據(jù)

共用體由若干不同類(lèi)型的數(shù)據(jù)項(xiàng)(變量)占用同一段內(nèi)存空間的結(jié)構(gòu),構(gòu)成共用體的各個(gè)數(shù)據(jù)項(xiàng)稱(chēng)為共用體成員。由于共享的特性,只有最新存儲(chǔ)的數(shù)據(jù)是有效的。119.5共用體

union共用體名

{數(shù)據(jù)類(lèi)型1成員名1;

數(shù)據(jù)類(lèi)型2成員名2;……

數(shù)據(jù)類(lèi)型n成員名n;

};共用體類(lèi)型定義的一般形式:

union為關(guān)鍵字;共用體名是用戶(hù)定義的類(lèi)型標(biāo)識(shí)。{}中是組成該共用體的成員。成員的數(shù)據(jù)類(lèi)型可以是C語(yǔ)言所允許的任何數(shù)據(jù)類(lèi)型。129.5共用體

----①變量的定義u1變量chu1變量iu1變量f一.利用已定義的共用體類(lèi)型名定義變量

union共用體名

變量名表;例如:

unionutype

u1,u2;

按照共用體類(lèi)型的組成,系統(tǒng)為定義的共用體變量分配內(nèi)存單元。共用體變量所占內(nèi)存大小等于共用體中占用內(nèi)存的長(zhǎng)度最長(zhǎng)的成員。u1變量cc[0]c[1]c[2]c[3]139.5共用體

----①變量的定義二.在定義共用體類(lèi)型的同時(shí)定義變量例如:

unionutype{

inti;charch;floatf;charc[4];}a,b,c;

union共用體名

{

成員定義表;

}變量名表;149.5共用體

----①變量的定義三.直接定義共用體類(lèi)型變量

例如:

union

{

inti;charch;floatf;charc[4];}a,b,c;

union{

成員定義表;

}變量名表;159.5共用體

----②變量的引用與結(jié)構(gòu)變量一樣只能逐個(gè)引用共用變量的成員

scanf(“%d”,&a);printf(“%d”,a);訪(fǎng)問(wèn)變量a各成員的格式為:a.i、a.ch、a.f等

scanf(“%d”,&a.i);printf(“%d\n”,a.i);錯(cuò)誤錯(cuò)誤16結(jié)構(gòu)體與共用體的對(duì)比結(jié)構(gòu)體與共用體的主要區(qū)別:

(1)結(jié)構(gòu)體變量

占用空間是各成員所占空間之總和;

共用體變量

占存儲(chǔ)空間是各成員中所占空間最大者。(2)結(jié)構(gòu)體變量各成員占用內(nèi)存中一片連續(xù)的存儲(chǔ)區(qū),各成員的地址互不相同;共用體變量各成員在內(nèi)存中所占空間的起始地址相同。(3)結(jié)構(gòu)體變量的各個(gè)分量在任何時(shí)刻都同時(shí)存在,且可同時(shí)引用。共用體變量的各個(gè)分量在同一時(shí)刻只存在其中一個(gè),也只能引用其中的一個(gè)。

(4)結(jié)構(gòu)體變量可以初始化,共用體變量不能初始化。179.7用戶(hù)自定義類(lèi)型為類(lèi)型名定義別名的一般形式:

typedef類(lèi)型名新類(lèi)型名或

typedef

類(lèi)型定義新類(lèi)型名除可直接使用C提供的標(biāo)準(zhǔn)類(lèi)型和構(gòu)造類(lèi)型(結(jié)構(gòu)、共用、枚舉)外,也可使用typedef定義已有類(lèi)型的別名。該別名與標(biāo)準(zhǔn)類(lèi)型名一樣,可用來(lái)定義相應(yīng)的變量。typedef是關(guān)鍵字;類(lèi)型名可以是基本類(lèi)型、構(gòu)造類(lèi)型、指針類(lèi)型或自定義類(lèi)型名;

新類(lèi)型名是自定義的類(lèi)型名。189.7用戶(hù)自定義類(lèi)型typedefintINTEGRER;/*定義INTEGRER為整型類(lèi)型的別名*

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論