c語言程序設(shè)計第10章課件-_第1頁
c語言程序設(shè)計第10章課件-_第2頁
c語言程序設(shè)計第10章課件-_第3頁
c語言程序設(shè)計第10章課件-_第4頁
c語言程序設(shè)計第10章課件-_第5頁
已閱讀5頁,還剩167頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第9章結(jié)構(gòu)體與共用體池州師專計算機(jī)中心C

語言程序設(shè)計1第9章結(jié)構(gòu)體與共用體池州師專計算機(jī)中心C語言程序設(shè)第9章結(jié)構(gòu)體與共用體9.1結(jié)構(gòu)體9.2共用體9.3枚舉類型與類型命名2022/12/172第9章結(jié)構(gòu)體與共用體9.1結(jié)構(gòu)體2022/12/162一個學(xué)生的信息有學(xué)號、姓名、性別、年齡、住址、成績等。一本圖書的信息有分類編號、書名、作者、出版社、出版日期、價格、庫存量等。如何描述這些類型不同的相關(guān)數(shù)據(jù)?9.1結(jié)構(gòu)體9.1.1結(jié)構(gòu)體與結(jié)構(gòu)體類型的定義?信息管理結(jié)構(gòu)體——一種構(gòu)造類型數(shù)據(jù)

結(jié)構(gòu)體由若干不同類型的數(shù)據(jù)項組成,構(gòu)成結(jié)構(gòu)體的各個數(shù)據(jù)項稱為結(jié)構(gòu)體成員。2022/12/173一個學(xué)生的信息有學(xué)號、姓名、性別、年齡、住址、成績等

struct結(jié)構(gòu)體名{數(shù)據(jù)類型1成員名1;數(shù)據(jù)類型2成員名2;……數(shù)據(jù)類型n成員名n;

};9.1結(jié)構(gòu)體9.1.1結(jié)構(gòu)體與結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型定義的一般形式:

struct為關(guān)鍵字;結(jié)構(gòu)體名是用戶定義的類型標(biāo)識。{}中是組成該結(jié)構(gòu)體的成員。成員的數(shù)據(jù)類型可以是C語言所允許的任何數(shù)據(jù)類型。2022/12/174struct結(jié)構(gòu)體名9.1結(jié)構(gòu)體9.1.1結(jié)構(gòu)體與例如圖書類型的定義:

structbookcard{charnum[10];/*圖書分類編號是字符數(shù)組類型*/charname[30];/*書名是字符數(shù)組類型*/

charauthor[30];/*作者是字符數(shù)組類型*/charpublisher[60];/*出版社是字符數(shù)組類型*/

floatprice;/*價格是單精度實型*/

intn;/*庫存量是整型*/

};例如學(xué)生類型的定義:structstudent{charnum[8];/*學(xué)號是字符數(shù)組類型*/charname[30];/*姓名是字符數(shù)組類型*/charsex;/*性別是字符型

*/intage;/*年齡是整型

*/

charaddr[60];/*住址是字符數(shù)組類型*/intscore[6];/*成績是整型數(shù)組類型*/

};9.1結(jié)構(gòu)體9.1.1結(jié)構(gòu)體與結(jié)構(gòu)體類型的定義2022/12/175例如圖書類型的定義:例如學(xué)生類型的定義:9.1結(jié)構(gòu)體9.9.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化1.結(jié)構(gòu)體類型變量的定義

利用已定義的結(jié)構(gòu)體類型名定義變量struct結(jié)構(gòu)體名

變量名表;例如:structbookcardbook1[100];structstudents[30],t1,t2;按照結(jié)構(gòu)體類型的組成,系統(tǒng)為定義的結(jié)構(gòu)體變量分配內(nèi)存單元。結(jié)構(gòu)體變量的各個成員在內(nèi)存中占用連續(xù)存儲區(qū)域,結(jié)構(gòu)體變量所占內(nèi)存大小為結(jié)構(gòu)體中每個成員所占用內(nèi)存的長度之和。structstudentnum8個字節(jié)name30個字節(jié)sex1個字節(jié)age2個字節(jié)addr60個字節(jié)score12個字節(jié)2022/12/1769.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化1.結(jié)構(gòu)9.1結(jié)構(gòu)體結(jié)構(gòu)體類型與變量的說明類型與變量是不同的概念。應(yīng)先定義一個結(jié)構(gòu)體類型,而后再定義結(jié)構(gòu)體變量。系統(tǒng)對類型不分配空間,僅對變量分配空間。只能對變量賦值、存取或運(yùn)算,而不能對一個類型賦值、存取或運(yùn)算。成員也可以是結(jié)構(gòu)變量。對結(jié)構(gòu)中的成員,可以單獨使用,它的作用與地位相當(dāng)于普通變量。成員名可與程序中的變量名相同時,也可與不同結(jié)構(gòu)體類型的成員名相同,二者代表不同的對象。

structdate{intyear,month,day;};structstudent{charnum[8];charname[30];charsex;

structdatebirthday;/*成員為結(jié)構(gòu)體類型*/

charaddr[60];intscore[6];

};num8個字節(jié)name30個字節(jié)sex1個字節(jié)birthdayyear2個字節(jié)month2個字節(jié)day2個字節(jié)addr60個字節(jié)score12個字節(jié)2022/12/1779.1結(jié)構(gòu)體結(jié)構(gòu)體類型與變量的說明類型與變量是不同的概念。9.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化1.結(jié)構(gòu)體類型變量的定義

在定義結(jié)構(gòu)體類型的同時定義變量例如:structstudent{charnum[8],name[20],sex;intage;floatscore;

}st[30];struct結(jié)構(gòu)體名{

成員定義表;

}變量名表;2022/12/1789.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化1.結(jié)構(gòu)9.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化1.結(jié)構(gòu)體類型變量的定義

直接定義結(jié)構(gòu)體類型變量

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

}st[30],a,b,c;struct{

成員定義表;

}變量名表;2022/12/1799.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化1.結(jié)構(gòu)9.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化2.結(jié)構(gòu)體變量的初始化

【例9.4】結(jié)構(gòu)體變量的初始化。structdate{intyear,month,day;};structstudent{charnum[8],name[20],sex;structdatebirthday;floatscore;}a={"9606011","Liming",'M',{1977,12,9},83},b={"9608025","Zhangliming",'F',{1978,5,10},87},c;

如果初值個數(shù)少于結(jié)構(gòu)體成員個數(shù),

則將無初值對應(yīng)的成員賦以0值。

如果初值個數(shù)多于結(jié)構(gòu)體成員個數(shù),

則編譯出錯。2022/12/17109.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化2.結(jié)構(gòu)9.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化2.結(jié)構(gòu)體變量的初始化

【例9.5】結(jié)構(gòu)體數(shù)組的初始化。structs{charnum[8],name[20],sex;floatscore;}stu[3]={{"9606011","Liming",'M',87.5},

{"9606012","Zhangjiangguo",'M',79},{"9606013","Wangping",'F',90}};

元素的個數(shù)可以省略,根據(jù)賦初值時

結(jié)構(gòu)體常量的個數(shù)確定數(shù)組元素的個數(shù)

2022/12/17119.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化2.結(jié)構(gòu)9.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化3.結(jié)構(gòu)體變量的運(yùn)算

用sizeof運(yùn)算符計算結(jié)構(gòu)體變量所占內(nèi)存空間

structdate{intyear,month,day;};structstudent{charnum[8],name[20],sex;structdatebirthday;floatscore;}a;

sizeof(a)

的結(jié)果為8+20+1+6+4=39

sizeof(structstudent)

的結(jié)果為39

2022/12/17129.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化3.結(jié)構(gòu)9.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化3.結(jié)構(gòu)體變量的運(yùn)算

同類型結(jié)構(gòu)體變量之間的賦值運(yùn)算結(jié)構(gòu)體變量之間進(jìn)行賦值時,系統(tǒng)將按成員一一對應(yīng)賦值。structdate{intyear,month,day;};structstudent{charnum[8],name[20],sex;structdatebirthday;floatscore;}a={"9606011","Liming",'M',{1977,12,9},83},b,c;c=a;2022/12/17139.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化3.結(jié)構(gòu)9.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化3.結(jié)構(gòu)體變量的運(yùn)算

對結(jié)構(gòu)體變量進(jìn)行取址運(yùn)算

structdate{intyear,month,day;};structstudent{charnum[8],name[20],sex;structdatebirthday;floatscore;}a;對結(jié)構(gòu)體變量a進(jìn)行

&a運(yùn)算,可以得到a的首地址,它是結(jié)構(gòu)體類型指針。

2022/12/17149.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化3.結(jié)構(gòu)9.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化4.結(jié)構(gòu)體變量成員的引用

結(jié)構(gòu)體變量成員引用的一般形式:結(jié)構(gòu)體變量名.成員名

結(jié)構(gòu)體變量a的各成員可分別表示為a.num、、a.sex、a.birthday、a.score

structdate{intyear,month,day;};structstudent{charnum[8],name[20],sex;structdatebirthday;floatscore;}a;“.”是分量運(yùn)算符,運(yùn)算級別最高。a.birthday.year

a.birthday.month

a.birthday.day

結(jié)構(gòu)體變量的各個成員可進(jìn)行何種運(yùn)算,由該成員的數(shù)據(jù)類型決定

2022/12/17159.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化4.結(jié)構(gòu)9.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化【例9.6】編寫一個統(tǒng)計選票的程序。structcandidate{charname[20];/*name為候選人姓名*/

intcount;/*count為候選人得票數(shù)*/}list[]={{"invalid",0},{"Zhao",0},{"Qian",0},

{"Sun",0},{"Li",0},{"Zhou",0}};2022/12/17169.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化【例9.69.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化main(){inti,n;printf("Entervote\n");

scanf("%d",&n);/*輸入所投候選人編號,編號從1開始*/

while(n!=-1)/*當(dāng)輸入編號為-1時,表示投票結(jié)束*/

{

if(n>=1&&n<=5)

list[n].count++;/*有效票,則相應(yīng)候選人計票成員加1*/

else

{printf("invalid\n");list[0].count++;}/*無效票,list[0]的計票成員加1*/

scanf("%d",&n);/*輸入所投候選人編號*/

}2022/12/17179.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化main(9.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化for(i=1;i<=5;i++)printf("%s:%d\n",list[i].name,list[i].count);printf("%s:%d\n",list[0].name,list[0].count);}2022/12/17189.1結(jié)構(gòu)體9.1.2結(jié)構(gòu)體變量的定義與初始化for(9.1結(jié)構(gòu)體1.結(jié)構(gòu)體指針變量的定義

結(jié)構(gòu)體指針變量定義的一般形式:

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

*指針變量名;structdate{intyear,month,day;}*q;例如:structstudent*p;p是指向structstudent結(jié)構(gòu)體變量的指針變量

9.1.3結(jié)構(gòu)體的指針2022/12/17199.1結(jié)構(gòu)體1.結(jié)構(gòu)體指針變量的定義結(jié)構(gòu)體指針變量定義9.1結(jié)構(gòu)體9.1.3結(jié)構(gòu)體的指針2.結(jié)構(gòu)體成員的三種引用形式

用結(jié)構(gòu)體變量名的引用形式:

d.year

d.month

d.daystructdate{intyear,month,day;}d,*p=&d;

用結(jié)構(gòu)體指針變量的引用形式:(*p).year(*p).month(*p).dayp->yearp->monthp->day“->”是指向結(jié)構(gòu)體成員運(yùn)算符,優(yōu)先級為一級

p=&d.year×2022/12/17209.1結(jié)構(gòu)體9.1.3結(jié)構(gòu)體的指針2.結(jié)構(gòu)體成員的三種9.1結(jié)構(gòu)體9.1.3結(jié)構(gòu)體的指針

【例9_a】輸入今天的日期,然后輸出該日期。

main() {structdate

/*在函數(shù)中定義結(jié)構(gòu)體類型*/

{

intyear,month,day;

}today,*p=&today;

/*定義結(jié)構(gòu)體變量及其指針*/

printf("Entertodaydate(YYYY/MM/DD):"); scanf("%d/%d/%d",&today.year,&today.month,

&today.day);printf("Today:%d/%d/%d\n",p->year,p->month,p->day); }2022/12/17219.1結(jié)構(gòu)體9.1.3結(jié)構(gòu)體的指針【例9_a】輸入今天9.1結(jié)構(gòu)體9.1.3結(jié)構(gòu)體的指針3.指向結(jié)構(gòu)體數(shù)組的指針

【例9.7】利用結(jié)構(gòu)體指針輸出一組化學(xué)元素名稱及其原子量。structlist{inti;charname[4];floatw;}tab[4]={{1,"H",1.008},{2,"He",4.0026},{3,"Li",6.941},{4,"Be",9.01218}};tab數(shù)組1Htab[0]1.0082Hetab[1]4.00263Litab[2]6.9414Betab[3]9.012182022/12/17229.1結(jié)構(gòu)體9.1.3結(jié)構(gòu)體的指針3.指向結(jié)構(gòu)體數(shù)組的9.1結(jié)構(gòu)體9.1.3結(jié)構(gòu)體的指針3.指向結(jié)構(gòu)體數(shù)組的指針

main(){structlist*p;printf("No\tName\tAtomicWeight\n");for(p=tab;p<tab+4;p++)printf("%d\t%s\t%f\n",p->i,p->name,p->w);}tab數(shù)組1Htab[0]1.0082Hetab[1]4.00263Litab[2]6.9414Betab[3]9.01218pppppNoNameAtomicWeight1H1.0082He4.00263Li

6.9414Be

9.012182022/12/17239.1結(jié)構(gòu)體9.1.3結(jié)構(gòu)體的指針3.指向結(jié)構(gòu)體數(shù)組的9.1結(jié)構(gòu)體9.1.3結(jié)構(gòu)體的指針【例9.8】分析自增自減運(yùn)算對程序結(jié)果的影響。structcode{inti;charc;}a[]={{100,'A'},{200,'B'},{300,'C'},{400,'D'}};a數(shù)組100a[0]'A'200a[1]'B'300a[2]'C'400a[3]'D'2022/12/17249.1結(jié)構(gòu)體9.1.3結(jié)構(gòu)體的指針【例9.8】分析自增自9.1結(jié)構(gòu)體9.1.3結(jié)構(gòu)體的指針main(){structcode*p=a;printf("%d\t",++p->i);printf("%c\t",(++p)->c);printf("%d\t",(p++)->i);printf("%c\t",++p->c);printf("%d\t",p->i++);printf("%d\n",p->i);}a數(shù)組100a[0]'A'200a[1]'B'300a[2]'C'400a[3]'D'p101'D'301101B200D3003012022/12/17259.1結(jié)構(gòu)體9.1.3結(jié)構(gòu)體的指針main()a數(shù)組19.1結(jié)構(gòu)體9.1.4函數(shù)間結(jié)構(gòu)體數(shù)據(jù)的傳遞方法一:在函數(shù)之間直接傳遞結(jié)構(gòu)體數(shù)據(jù)。函數(shù)的形參定義為結(jié)構(gòu)體變量。函數(shù)調(diào)用時,可將主調(diào)函數(shù)的結(jié)構(gòu)體類型實參傳遞給被調(diào)函數(shù)的形參。如果將函數(shù)定義為結(jié)構(gòu)體類型函數(shù),可利用return語句將一個結(jié)構(gòu)體數(shù)據(jù)結(jié)果返回到主調(diào)函數(shù)中。2022/12/17269.1結(jié)構(gòu)體9.1.4函數(shù)間結(jié)構(gòu)體數(shù)據(jù)的傳遞方法一:在函9.1結(jié)構(gòu)體9.1.4函數(shù)間結(jié)構(gòu)體數(shù)據(jù)的傳遞方法二:在函數(shù)之間傳遞結(jié)構(gòu)體指針。

形參定義為指向結(jié)構(gòu)體類型的指針變量,可將主調(diào)函數(shù)的結(jié)構(gòu)體指針傳遞給被調(diào)函數(shù)的形參變量,通過指針形參的指向域的擴(kuò)展,操作主調(diào)函數(shù)中結(jié)構(gòu)體變量及其成員。如果將函數(shù)定義為結(jié)構(gòu)體指針型函數(shù),可利用return語句將被調(diào)函數(shù)中結(jié)構(gòu)體變量的指針返回給主調(diào)函數(shù)的結(jié)構(gòu)體指針變量。方法三:利用全局結(jié)構(gòu)體變量傳遞結(jié)構(gòu)體數(shù)據(jù)。2022/12/17279.1結(jié)構(gòu)體9.1.4函數(shù)間結(jié)構(gòu)體數(shù)據(jù)的傳遞方法二:在函9.1結(jié)構(gòu)體9.1.4函數(shù)間結(jié)構(gòu)體數(shù)據(jù)的傳遞

【例9.9】編制一個復(fù)數(shù)乘法函數(shù),采用值傳遞的方

法傳送數(shù)據(jù)。structcomplex/*定義存放復(fù)數(shù)的結(jié)構(gòu)體類型*/{floatre;/*re成員用于存放復(fù)數(shù)的實部*/

floatim;/*im成員用于存放復(fù)數(shù)的虛部*/};2022/12/17289.1結(jié)構(gòu)體9.1.4函數(shù)間結(jié)構(gòu)體數(shù)據(jù)的傳遞【例9.99.1結(jié)構(gòu)體9.1.4函數(shù)間結(jié)構(gòu)體數(shù)據(jù)的傳遞structcomplexmultiplier(structcomplexcx,

structcomplexcy){structcomplexcz;cz.re=cx.re*cy.re-cx.im*cy.im;cz.im=cx.re*cy.im+cx.im*cy.re;return(cz);}

形參是結(jié)構(gòu)體變量。調(diào)用此函數(shù)時,

系統(tǒng)將分別為形參cx和cy各分配一個

sizeof(structcomplex)大小的內(nèi)存空間,

每個成員都要一一傳遞。

2022/12/17299.1結(jié)構(gòu)體9.1.4函數(shù)間結(jié)構(gòu)體數(shù)據(jù)的傳遞struct9.1結(jié)構(gòu)體9.1.4函數(shù)間結(jié)構(gòu)體數(shù)據(jù)的傳遞main(){structcomplexx,y,z;x.re=3.2;x.im=1.5;y.re=2.7;y.im=4.6;z=multiplier(x,y);printf("%f+%fi\n",z.re,z.im);/*以復(fù)數(shù)形式輸出*/}2022/12/17309.1結(jié)構(gòu)體9.1.4函數(shù)間結(jié)構(gòu)體數(shù)據(jù)的傳遞main(9.1結(jié)構(gòu)體9.1.4函數(shù)間結(jié)構(gòu)體數(shù)據(jù)的傳遞

【例9.10】編制一個復(fù)數(shù)乘法函數(shù),采用傳遞指針

的方法達(dá)到傳送數(shù)據(jù)的目的。structcomplex{floatre,im;};voidmultiplier(structcomplex*px,

structcomplex*py,structcomplex*pz){pz->re=px->re*py->re-px->im*py->im;pz->im=px->re*py->im+px->im*py->re;}

形參定義為指針型參數(shù)。函數(shù)調(diào)用時,實參傳遞的

是結(jié)構(gòu)體指針(地址),因此形參px、py可讀取主調(diào)函

數(shù)中變量的內(nèi)容,乘積結(jié)果也可通過形參pz指針存到主

調(diào)函數(shù)中的目標(biāo)變量。

這樣實參與形參之間的數(shù)據(jù)傳遞由多值(每個成員的值)

變成了單值(結(jié)構(gòu)體變量的首地址)。

2022/12/17319.1結(jié)構(gòu)體9.1.4函數(shù)間結(jié)構(gòu)體數(shù)據(jù)的傳遞【例9.19.1結(jié)構(gòu)體9.1.4函數(shù)間結(jié)構(gòu)體數(shù)據(jù)的傳遞main(){structcomplexx,y,z;x.re=3.2;x.im=1.5;y.re=2.7;y.im=4.6;multiplier(&x,&y,&z);printf("(%f+%fi)*(%f+%fi)=%f+%fi\n",x.re,x.im,

y.re,y.im,z.re,z.im);}2022/12/17329.1結(jié)構(gòu)體9.1.4函數(shù)間結(jié)構(gòu)體數(shù)據(jù)的傳遞main(

鏈表是一種動態(tài)數(shù)據(jù)結(jié)構(gòu),可根據(jù)需要動態(tài)地分配存儲單元。在數(shù)組中,插入或刪除一個元素都比較繁瑣,而用鏈表則相對容易。但是數(shù)組元素的引用比較簡單,對于鏈表中結(jié)點數(shù)據(jù)的存取操作則相對復(fù)雜。

9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表①鏈表中每個元素稱為一個結(jié)點。②構(gòu)成鏈表的結(jié)點必須是結(jié)構(gòu)體類型數(shù)據(jù)。1.鏈表的基本結(jié)構(gòu)

head100010323284129613822008圖9.2動態(tài)單向鏈表示意圖C3284H1296A1382I2008NNULL10001032③相鄰結(jié)點的地址不一定是連續(xù)的,依靠指針將

它們連接起來。structnode{charc;structnode*next;};2022/12/1733鏈表是一種動態(tài)數(shù)據(jù)結(jié)構(gòu),可根據(jù)需要動態(tài)地分配存儲單

C語言提供了相關(guān)的存儲管理庫函數(shù)。這里僅介紹其中三個,它們的原型說明在“stdlib.h”頭文件和“alloc.h”頭文件中,使用這三個函數(shù)時,應(yīng)選擇其中一個頭文件包含到源程序中。⑴動態(tài)分配存儲區(qū)函數(shù)malloc()函數(shù)原型:void

*malloc(unsignedsize);調(diào)用格式:malloc(size)功能:在內(nèi)存分配一個size字節(jié)的存儲區(qū)。調(diào)用

結(jié)果為新分配的存儲區(qū)的首地址,是一個void

類型指針。若分配失敗,則返回NULL(即0)。9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表2.動態(tài)分配和釋放存儲單元

在ANSIC標(biāo)準(zhǔn)中,關(guān)鍵字void有兩種用法。第一種用法,可將無返回值的函數(shù)定義為void類型第二種用法,用void

*

定義指針,這是一個指向非具體數(shù)據(jù)類型的指針,稱為無類型指針。2022/12/1734C語言提供了相關(guān)的存儲管理庫函數(shù)。這里僅介紹其中三【例9.11】調(diào)用malloc函數(shù)分配所需存儲單元。#include<stdlib.h>main(){structst{intn;structst*next;}*p;p=(structst*)malloc(sizeof(structst));p->n=5;p->next=NULL;printf("p->n=%d\tp->next=%x\n",p->n,p->next);}9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表2.動態(tài)分配和釋放存儲單元

將函數(shù)返回值轉(zhuǎn)換成結(jié)構(gòu)體指針

2022/12/1735【例9.11】調(diào)用malloc函數(shù)分配所需存儲單元。9.1⑵動態(tài)分配存儲區(qū)函數(shù)calloc()函數(shù)原型:

void

*calloc(unsignedintn,unsignedintsize);調(diào)用格式:calloc(n,size)功能:在內(nèi)存分配一個n倍size字節(jié)的存儲區(qū)。

調(diào)用結(jié)果為新分配的存儲區(qū)的首地址,是一個void

類型指針。若分配失敗,則返回NULL(即0)。9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表2.動態(tài)分配和釋放存儲單元

2022/12/1736⑵動態(tài)分配存儲區(qū)函數(shù)calloc()9.1結(jié)構(gòu)體9.1【例9.12】調(diào)用calloc函數(shù)分配所需存儲單元。#include<stdlib.h>main(){inti,*ip;ip=(int*)calloc(10,2);for(i=0;i<10;i++)scanf("%d",ip+i);for(i=0;i<10;i++)printf("%d",*(ip+i));printf("\n");}9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表2.動態(tài)分配和釋放存儲單元

動態(tài)分配了10個存放整型數(shù)據(jù)的存儲單元

2022/12/1737【例9.12】調(diào)用calloc函數(shù)分配所需存儲單元。9.1⑶釋放動態(tài)分配存儲區(qū)函數(shù)free()函數(shù)原型:void

free(void

*p);9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表2.動態(tài)分配和釋放存儲單元

此函數(shù)無返回值實參必須是一個指向動態(tài)分配存儲區(qū)

的指針,它可以是任何類型的指針變量。調(diào)用格式:free(p)功能:釋放p所指向的動態(tài)分配的存儲區(qū)。2022/12/1738⑶釋放動態(tài)分配存儲區(qū)函數(shù)free()9.1結(jié)構(gòu)體9.1q

建立鏈表就是根據(jù)需要一個一個地開

辟新結(jié)點,在結(jié)點中存放數(shù)據(jù)并建立結(jié)點

之間的鏈接關(guān)系。

【例9.13】建立一個學(xué)生電話簿

的單向鏈表函數(shù)。9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表3.建立單向鏈表頭指針h設(shè)為NULL讀入一個學(xué)生姓名當(dāng)姓名長度不為0開辟新結(jié)點p=NEW

strcpy(p->name,name)gets(p->tel)p->next=NULLh==NULLTFh指向第一個連接新結(jié)點結(jié)點h=pq->next=pq指向新的尾結(jié)點q=p

讀入一個學(xué)生姓名圖9.3建立單向鏈表NULLhpChang62783410NULLWang63212986NULLpq

2022/12/1739q建立鏈表就是根據(jù)需要一個一個地開strcpy(p->name,name);/*為新結(jié)點中的成員賦值*/

printf("tel:");gets(p->tel);p->next=NULL;if(h==NULL)/*h為空,表示新結(jié)點為第一個結(jié)點*/

h=p;/*頭指針指向第一個結(jié)點*/

else/*h不為空*/

q->next=p;/*新結(jié)點與尾結(jié)點相連接*/

q=p;/*使q指向新的尾結(jié)點*/

printf("name:");gets(name);

}returnh;}structnode*create(){staticstructnode*h;structnode*p,*q;charname[20];h=NULL;printf("name:");gets(name);while(strlen(name)!=0)/*當(dāng)輸入的姓名不是空串循環(huán)*/

{

p=NEW;/*開辟新結(jié)點*/

if(p==NULL)/*p為NULL,新結(jié)點分配失敗*/{printf("Allocationfailure\n");exit(0);/*結(jié)束程序運(yùn)行*/}#include<stdlib.h>#include<string.h>#defineNEW(structnode*)malloc(sizeof(structnode))structnode{charname[20],tel[9];structnode*next;};9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表main(){structnode*head;……h(huán)ead=create();……}2022/12/1740strcpy(p->name,name);【例9.14】輸出學(xué)生電話簿鏈表函數(shù)。9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表4.輸出單向鏈表中各結(jié)點信息hpChang62783410Li68752341NULLWang63212986

p指向第一個結(jié)點

p=head

當(dāng)p不為NULL輸出結(jié)點數(shù)據(jù)p指向下一個結(jié)點p=p->next圖9.5輸出鏈表的N-S圖pppNULL2022/12/1741【例9.14】輸出學(xué)生電話簿鏈表函數(shù)。9.1結(jié)構(gòu)體9.1.voidprlist(structnode*head){structnode*p;p=head;while(p!=NULL){printf("%s\t%s\n",p->name,p->tel);p=p->next;}}#include<stdlib.h>#include<string.h>#defineNEW(structnode*)malloc(sizeof(structnode))structnode{charname[20],tel[9];structnode*next;};9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表main(){structnode*head;……h(huán)ead=create();prlist(head);……}2022/12/1742voidprlist(structnode*head)在鏈表中,如果要刪除第i個結(jié)點,一般是將第(i-1)

個結(jié)點直接與第(i+1)個結(jié)點相連接,然后再釋放第i個

結(jié)點的存儲單元。9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表5.刪除單向鏈表中指定的結(jié)點hNULL第i-1個結(jié)點第i個結(jié)點第i+1個結(jié)點

2022/12/1743在鏈表中,如果要刪除第i個結(jié)點,一般是將第(i-【例9.15】刪除學(xué)生電話簿鏈

表中指定學(xué)生的信息。9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表

p=headwhile(strcmp(x,p->name)!=0&&p->next!=NULL)q指針跟隨p指針后移查找(q=p;p=p->next;)strcmp(x,p->name)==0TFp==headTFhead=p->nextq->next=p->next沒找到

free(p)圖9.9刪除鏈表中指定結(jié)點的N-S圖刪除

第一個結(jié)點

刪除中間結(jié)點或尾結(jié)點

刪除結(jié)點工

作分兩步:查找結(jié)點刪除結(jié)點學(xué)生姓名當(dāng)姓名不同并且不是尾結(jié)點循環(huán)2022/12/1744【例9.15】刪除學(xué)生電話簿鏈

表中指定學(xué)生的信息。9.1【例9.15】刪除學(xué)生電話簿鏈表中指定學(xué)生的信息。9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表hpChang62783410Li68752341NULLWang63212986(a)刪除第一個結(jié)點(head=p->next)2022/12/1745【例9.15】刪除學(xué)生電話簿鏈表中指定學(xué)生的信息。9.1結(jié)【例9.15】刪除學(xué)生電話簿鏈表中指定學(xué)生的信息。9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表hpChang62783410Li68752341NULLWang63212986(b)刪除中間結(jié)點或尾結(jié)點(q->next=p->next)p

q2022/12/1746【例9.15】刪除學(xué)生電話簿鏈表中指定學(xué)生的信息。9.1結(jié)【例9.15】刪除學(xué)生電話簿鏈表中指定學(xué)生的信息。9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表hpChang62783410Li68752341NULLWang63212986pp(c)未找到指定的結(jié)點(strcmp(x,p->name)!=0)

qq

2022/12/1747【例9.15】刪除學(xué)生電話簿鏈表中指定學(xué)生的信息。9.1結(jié)

if(strcmp(x,p->name)==0){if(p==head)head=p->next;/*刪除頭結(jié)點*/

elseq->next=p->next;/*刪除中間或尾結(jié)點*/

free(p);/*釋放被刪除的結(jié)點*/}

elseprintf("Notfound.");/*未找到指定的結(jié)點*/

h=head;returnh;}#include<stdlib.h>#include<string.h>#defineNEW(structnode*)malloc(sizeof(structnode))structnode{charname[20],tel[9];structnode*next;};9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表structnode*delnode(structnode*head,char*x){structnode*p,*q;staticstructnode*h;if(head==NULL){printf("Thisisaemptylist.");/*空鏈表情況*/

returnhead;}p=head;while(strcmp(x,p->name)!=0&&p->next!=NULL){q=p;p=p->next;}/*q指針尾隨p指針向表尾移動*/查找結(jié)點

2022/12/1748if(strcmp(x,p->name)==0)#in將一個新結(jié)點插入到鏈表中,首先要尋找插入的位置。如果要求在第i個結(jié)點前插入,可設(shè)置三個工作指針p0、p和q,p0是指向待插入結(jié)點的指針。利用p和q指針查找第i個結(jié)點,找到后再將新結(jié)點鏈接到鏈表上。

9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表6.在單向鏈表中插入結(jié)點hNULL第i個結(jié)點ppqqp0p新的第i個結(jié)點2022/12/1749將一個新結(jié)點插入到鏈表中,首先要尋找插入的位置。

head==NULLTFp=headhead=p0while(strcmp(x,p->name)!=0&&p->next!=NULL)p0->nextq指針跟隨p指針后移查找(q=p;p=p->next;)=NULLstrcmp(x,p->name)==0TFp==headTFp->next=p0head=p0q->next=p0p0->next=NULLp0->next=p圖9.11在鏈表指定位置前插入結(jié)點的N-S圖【例9.16】在學(xué)生電話簿鏈表中插入一個學(xué)生的信息。要求將新的信息插入在指定學(xué)生信息之前,如果未找到指定學(xué)生,則追加在鏈表尾部。

9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表當(dāng)姓名不同并且不是尾結(jié)點循環(huán)空表時

插入

結(jié)點在表尾

追加結(jié)點

插入結(jié)點工

作分兩步:查找插

入位置連接

新結(jié)點在表頭

插入結(jié)點

在表中間

插入結(jié)點

2022/12/1750

【例9.16】在學(xué)生電話簿鏈表中插入一個學(xué)生的信息。要求將新的信息插入在指定學(xué)生信息之前,如果未找到指定學(xué)生,則追加在鏈表尾部。9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表hpChang62783410Li68752341NULLWang63212986(a)在表頭插入結(jié)點(head=p0;p0->next=p)Zhao62758421p02022/12/1751【例9.16】在學(xué)生電話簿鏈表中插入一個學(xué)生的信息。要求將新【例9.16】在學(xué)生電話簿鏈表中插入一個學(xué)生的信息。要求將新的信息插入在指定學(xué)生信息之前,如果未找到指

定學(xué)生,則追加在鏈表尾部。9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表hChang62783410Li68752341NULLWang63212986(b)在表中間插入結(jié)點(q->next=p0;p0->next=p)pqZhao62758421p02022/12/1752【例9.16】在學(xué)生電話簿鏈表中插入一個學(xué)生的信息。要求將新【例9.16】在學(xué)生電話簿鏈表中插入一個學(xué)生的信息。要求將新的信息插入在指定學(xué)生信息之前,如果未找到指定學(xué)生,則追加在鏈表尾部。9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表hpChang62783410Li68752341NULLWang63212986pp(c)在表尾追加結(jié)點(p->next=p0;p0->next=NULL)

qq

Zhao62758421p0Zhao62758421NULL2022/12/1753【例9.16】在學(xué)生電話簿鏈表中插入一個學(xué)生的信息。要求將新

if(strcmp(x,p->name)==0){if(p==head)head=p0;/*在表頭插入結(jié)點*/

elseq->next=p0;/*在表中間插入結(jié)點*/

p0->next=p;}else{p->next=p0;/*在表尾插入結(jié)點*/

p0->next=NULL;}

}h=head;returnh;}structnode*insert(structnode*head,structnode*p0,

char*x){structnode*p,*q;staticstructnode*h;if(head==NULL){head=p0;/*空表時,插入結(jié)點*/

p0->next=NULL;}else

{p=head;while(strcmp(x,p->name)!=0&&p->next!=NULL){q=p;p=q->next;}查找插入點

9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表#include<stdlib.h>#include<string.h>#defineNEW(structnode*)malloc(sizeof(structnode))structnode{charname[20],tel[9];structnode*next;};2022/12/1754if(strcmp(x,p->name)==09.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表【例9.17】學(xué)生電話簿鏈表管理程序。編制此程序可利用例9.13至例9.16的4個函數(shù)完成鏈表的建立、輸出、刪除和插入等功能,這里只需編制一個main函數(shù)完成對這4個函數(shù)的調(diào)用。#include<stdlib.h>#defineNEW(structnode*)malloc(sizeof(structnode))structnode{charname[20],tel[9];structnode*next;};2022/12/17559.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表【例9.17】9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表main(){structnode*create(),*delnode(structnode*,char*);structnode*insert(structnode*,structnode*,char*);voidprlist(structnode*);structnode*head=NULL,*stu;chars[80],name[20];intc;2022/12/17569.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表main()9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表do

{do

{printf("\n****MENU****\n");printf("1.Createalist\n");printf("2.Printalist\n");printf("3.Deleteanode\n");printf("4.Insertanode\n");printf("0.Quit\n");printf("Enteryourchoice(0-4):");gets(s);c=atoi(s);

}while(c<0||c>4);

可以先選擇1建立一個鏈表,然后根據(jù)需要選擇功能2、功能3、功能4、直到選擇0退出程序的運(yùn)行

2022/12/17579.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表do可以先選擇9.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表switch(c)

{case1:head=create();break;case2:prlist(head);break;case3:printf("\nInputanamedeleted:\n");gets(name);head=delnode(head,name);break;case4:stu=NEW;printf("\nInputanewnode\n");printf("name:");gets(stu->name);printf("tel:");gets(stu->tel);

stu->next=NULL;printf("\nInsertposition\n");printf("name:");gets(name);

head=insert(head,stu,name);

}}while(c);}2022/12/17589.1結(jié)構(gòu)體9.1.5結(jié)構(gòu)體的應(yīng)用——鏈表switc結(jié)構(gòu)體類型解決了如何描述一個邏輯上相關(guān),但數(shù)據(jù)類型不同的一組分量的集合。在需要節(jié)省內(nèi)存儲空間時,c語言還提供了一種由若干個不同類型的數(shù)據(jù)項組成,但共享同一存儲空間的構(gòu)造類型。9.2共用體9.2.1共用體與共用體類型的定義共用體——一種構(gòu)造類型數(shù)據(jù)

共用體由若干不同類型的數(shù)據(jù)項組成,構(gòu)成共用體的各個數(shù)據(jù)項稱為共用體成員。由于共享的特性,只有最新存儲的數(shù)據(jù)是有效的。2022/12/1759結(jié)構(gòu)體類型解決了如何描述一個邏輯上相關(guān),但數(shù)據(jù)類型不

union共用體名{數(shù)據(jù)類型1成員名1;數(shù)據(jù)類型2成員名2;……數(shù)據(jù)類型n成員名n;

};9.2共用體9.2.1共用體與共用體類型的定義共用體類型定義的一般形式:

union為關(guān)鍵字;共用體名是用戶定義的類型標(biāo)識。{}中是組成該共用體的成員。成員的數(shù)據(jù)類型可以是C語言所允許的任何數(shù)據(jù)類型。2022/12/1760union共用體名9.2共用體9.2.1共用體與共例如:

unionutype{

inti;charch;longl;charc[4];

};9.2共用體9.2.1共用體與共用體類型的定義

定義了一個unionutype共用體

類型,共用體類型定義不分配內(nèi)存空間,只是說明此類型數(shù)據(jù)的組成情況。

2022/12/1761例如:9.2共用體9.2.1共用體與共用體類型的定義u1變量chu1變量iu1變量l9.2共用體9.2.2共用體變量的定義與初始化1.共用體變量的定義

利用已定義的共用體類型名定義變量union共用體名

變量名表;例如:unionutypeu1,u2;按照共用體類型的組成,系統(tǒng)為定義的共用體變量分配內(nèi)存單元。共用體變量所占內(nèi)存大小等于共用體中占用內(nèi)存的長度最長的成員。u1變量cc[0]c[1]c[2]c[3]2022/12/1762u1變量chu1變量iu1變量l9.2共用體9.2.2共9.2共用體9.2.2共用體變量的定義與初始化1.共用體變量的定義

在定義共用體類型的同時定義變量例如:

unionutype{

inti;charch;longl;charc[4];

}a,b,c;union共用體名{

成員定義表;

}變量名表;2022/12/17639.2共用體9.2.2共用體變量的定義與初始化1.共用9.2共用體9.2.2共用體變量的定義與初始化1.共用體變量的定義

直接定義共用體類型變量

例如:

union{

inti;charch;longl;charc[4];

}a,b,c;union{

成員定義表;

}變量名表;2022/12/17649.2共用體9.2.2共用體變量的定義與初始化1.共用9.2共用體9.2.2共用體變量的定義與初始化2.共用體變量的運(yùn)算

用sizeof運(yùn)算符計算共用體變量所占內(nèi)存空間

unionutype{

inti;charch;longl;charc[4];

}a,b,c;

sizeof(a)

的結(jié)果為4

sizeof(unionutype)

的結(jié)果為4

2022/12/17659.2共用體9.2.2共用體變量的定義與初始化2.共用9.2共用體9.2.2共用體變量的定義與初始化2.共用體變量的運(yùn)算

同類型共用體變量之間的賦值運(yùn)算共用體變量之間進(jìn)行賦值時,系統(tǒng)僅賦當(dāng)前有效

成員的值(即最新存儲的數(shù)據(jù))。

unionutype{

inti;charch;longl;charc[4];

}a,*p=&a;對共用體變量進(jìn)行取址運(yùn)算2022/12/17669.2共用體9.2.2共用體變量的定義與初始化2.共用9.2共用體9.2.2共用體變量的定義與初始化3.共用體變量成員的引用

共用體變量成員的引用有三種形式。例如:

unionu{charu1;intu2;}x,*p=&x;

用共用體變量名的引用形式:

x.u1

x.u2

用共用體指針變量的引用形式:(*p).u1(*p).u2p->u1p->u22022/12/17679.2共用體9.2.2共用體變量的定義與初始化3.共用9.2共用體9.2.2共用體變量的定義與初始化4.共用體變量賦初值

【例9.18】共用體變量賦初值。unionu{charu1;intu2;};main(){unionua={0x9741};printf("1.%c%x\n",a.u1,a.u2);a.u1='a';printf("2.%c%x\n",a.u1,a.u2);}

共用體類型變量在定義時只能對第一

個成員進(jìn)行賦初值。

由于第一個成員是字符型,用一個字

節(jié),所以對于初值0x9741僅能接受0x41,

初值的高字節(jié)被截去。

1.A412.a61對u2成員的引用是無意義的2022/12/17689.2共用體9.2.2共用體變量的定義與初始化4.共用9.2共用體9.2.2共用體變量的定義與初始化main(){union{longn;intk;charc;}un;un.n=0x12345678;printf("%lx\n",un.n);printf("%x\n",un.k);printf("%x\n",un.c);un.c='A';printf("%ld\n",un.n);printf("%d\n",un.k);printf("%c\n",un.c);}1234567856787830541984122081A0x780x560x340x12低地址高地址0x120x340x560x4100010010001101000101011001000001高地址低地址2022/12/17699.2共用體9.2.2共用體變量的定義與初始化main(enum是關(guān)鍵字;枚舉名和枚舉常量是標(biāo)識符;枚舉常量之間用逗號分隔。例如:enumweekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat};enumcolor1{blue,green,red};enumflag{false,true};9.3枚舉類型與類型命名9.3.1枚舉類型1.枚舉類型的定義

枚舉類型定義的一般形式:

enum

枚舉名{枚舉常量取值表};

枚舉是一個具有有限個整型符號常量的

集合,這些整型符號常量稱為枚舉常量。每個枚舉類型都必須進(jìn)行類型的定義,

定義時必須將其所有的枚舉常量一一列舉,

以便限定此枚舉類型變量的取值范圍。

2022/12/1770enum是關(guān)鍵字;例如:9.3枚舉類型與類型命名9.3.1在枚舉類型中,每個枚舉常量都代表一

個整型值。在定義枚舉類型的同時可隱式或

顯式地定義枚舉常量所代表的值。

例如:enumweekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat};9.3枚舉類型與類型命名9.3.1枚舉類型2.枚舉常量的整型值

隱式定義:按照類型定義時枚舉常量列舉的順序分別代表0、1、2、……等整型值。

01234562022/12/1771在枚舉類型中,每個枚舉常量都代表一

個整型值。在定義例如:enumop{plus=43,minus=45,multiply=42,divide=47};enumworkday{Mon=1,Tue,Wed,Thu,Fri};9.3枚舉類型與類型命名9.3.1枚舉類型2.枚舉常量的整型值

顯式定義:

在定義類型的同時指定枚舉常量的值,其中如有未指定值的枚舉常量,則根據(jù)前面的枚舉常量的值依次遞增1。23452022/12/1772例如:9.3枚舉類型與類型命名9.3.1枚舉類型2.枚例如:enumflagfg;enumcolor1c1;enumcolor2{blank,brown,yellow,white}c2;enum{lightblue,lightgreen,lightred}c3;9.3枚舉類型與類型命名9.3.1枚舉類型3.枚舉變量的定義

枚舉類型變量定義的三種形式:①enum

枚舉名枚舉變量名表;②enum

枚舉名{枚舉常量取值表}枚舉變量表;③enum{枚舉常量取值表}枚舉變量表;2022/12/1773例如:9.3枚舉類型與類型命名9.3.1枚舉類型3.枚⑵賦值運(yùn)算

fg=true;c1=red;c2=yellow;c3=lightblue;

c3=white;9.3枚舉類型與類型命名9.3.1枚舉類型4.枚舉數(shù)據(jù)的運(yùn)算

⑴用sizeof運(yùn)算符計算枚舉變量所占內(nèi)存空間枚舉變量中存放的是整型值,每個枚舉變量占用2個字節(jié)

〤是enumcolor2類型的枚舉值2022/12/1774⑵賦值運(yùn)算9.3枚舉類型與類型命名9.3.1枚舉類型⑷

取址運(yùn)算enumcolor2{blank,brown,yellow,white}c2;

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論