版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大9.1結(jié)構(gòu)體結(jié)構(gòu)體9.2結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組9.3結(jié)構(gòu)體與指針結(jié)構(gòu)體與指針9.4共用體共用體9.5 枚舉類型枚舉類型9.6用用typedef定義類型定義類型第第9 9章章 結(jié)構(gòu)體、共用體與枚舉類型結(jié)構(gòu)體、共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大9.1 9.1 結(jié)構(gòu)體結(jié)構(gòu)體結(jié)構(gòu)體是將不同類型的數(shù)據(jù)根據(jù)需要組合成一個(gè)有結(jié)構(gòu)體是將不同類型的數(shù)據(jù)根據(jù)需要組合成一個(gè)有機(jī)的整體,以便于引用。機(jī)的整體,以便于引用。這個(gè)整體是一個(gè)構(gòu)造數(shù)據(jù)類型這個(gè)整體是一個(gè)構(gòu)造數(shù)據(jù)類型結(jié)構(gòu)體類型,其結(jié)構(gòu)體類型,其中的數(shù)據(jù)是相互聯(lián)
2、系的。中的數(shù)據(jù)是相互聯(lián)系的。如要存儲(chǔ)一個(gè)學(xué)生的有關(guān)信息(學(xué)號(hào)、姓名、性別、如要存儲(chǔ)一個(gè)學(xué)生的有關(guān)信息(學(xué)號(hào)、姓名、性別、年齡、住址)年齡、住址)n u m n am e sex ag e ad d r 1 0 0 1 0 L i m in M 1 8 D alian 可采用結(jié)構(gòu)體數(shù)據(jù)結(jié)構(gòu)描述上述信息。可采用結(jié)構(gòu)體數(shù)據(jù)結(jié)構(gòu)描述上述信息。結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大struct studentint num; char name20; char sex; int age; char addr30;;定義一個(gè)結(jié)構(gòu)體類型的一定義一個(gè)結(jié)構(gòu)體類型的一般形式為:般形式為:s
3、truct 結(jié)構(gòu)體名結(jié)構(gòu)體名 成員表列成員表列;是類型,不是變量名是類型,不是變量名num nam e sex age addr 10010 L i m in M 18 D alian 對(duì)各成員都要進(jìn)行類型說(shuō)明;對(duì)各成員都要進(jìn)行類型說(shuō)明;成員名命名規(guī)則與變量名成員名命名規(guī)則與變量名結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大定義結(jié)構(gòu)體類型變量的方法定義結(jié)構(gòu)體類型變量的方法方法一方法一:先定義結(jié)構(gòu)體類型再定義變量:先定義結(jié)構(gòu)體類型再定義變量struct studentint num; char name20; char sex; int age; char addr30;;st
4、ruct student student1, student2;定義定義studet1和和sudent2為為struct student類型變量類型變量不能只指定一個(gè)變量為不能只指定一個(gè)變量為“struct型型”而不指定結(jié)構(gòu)體名而不指定結(jié)構(gòu)體名結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大可用符號(hào)常量代表一個(gè)結(jié)構(gòu)體類型可用符號(hào)常量代表一個(gè)結(jié)構(gòu)體類型#define STUDENT struct studentSTUDENTint num; char name20; char sex; int age; char addr30;這樣,可直接用這樣,可直接用STUDENT定義變量,如
5、:定義變量,如:STUDENT student1, student2;此時(shí),不必再寫關(guān)鍵字此時(shí),不必再寫關(guān)鍵字struct結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大方法二方法二:在定義類型的同時(shí)定義變量:在定義類型的同時(shí)定義變量struct studentint num; char name20; char sex; int age; char addr30;student1, student2;一般形式是:一般形式是:struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 成員表列成員表列 變量名表列;變量名表列;結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大方法三方法三:直接定
6、義結(jié)構(gòu)類型變量:直接定義結(jié)構(gòu)類型變量其一般形式是:其一般形式是:structstruct 成員表列成員表列 變量名表列;變量名表列;此時(shí),不出現(xiàn)結(jié)構(gòu)體名此時(shí),不出現(xiàn)結(jié)構(gòu)體名structint num; char name20; char sex; int age; char addr30;student1, student2;結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大幾點(diǎn)說(shuō)明:幾點(diǎn)說(shuō)明:1.1.類型與變量是不同概念,不要混淆;類型與變量是不同概念,不要混淆;2.2.結(jié)構(gòu)體中的成員,可以單獨(dú)使用,其作用與地位相當(dāng)于普通變量;結(jié)構(gòu)體中的成員,可以單獨(dú)使用,其作用與地位相當(dāng)于普通
7、變量;3.3.成員名可以與程序中的變量名相同,二者不代表同一對(duì)象?;ゲ桓蓴_。成員名可以與程序中的變量名相同,二者不代表同一對(duì)象。互不干擾。4.4.在結(jié)構(gòu)中,各成員都占有自己的內(nèi)存空間,它們是同時(shí)存在的。一個(gè)結(jié)在結(jié)構(gòu)中,各成員都占有自己的內(nèi)存空間,它們是同時(shí)存在的。一個(gè)結(jié)構(gòu)變量的總長(zhǎng)度等于所有成員長(zhǎng)度之和。構(gòu)變量的總長(zhǎng)度等于所有成員長(zhǎng)度之和。Sizeof( )Sizeof( )為一運(yùn)算符,其為一運(yùn)算符,其功能是測(cè)試某種類型的變量功能是測(cè)試某種類型的變量在內(nèi)存中所占用的字節(jié)數(shù)。在內(nèi)存中所占用的字節(jié)數(shù)。有:有:struct int i; char c; float a;test;sizeof(tes
8、t)的值是:的值是:7結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大struct date int month; int day; int year; ;Struct studentint num;char name20;int age;struct date birthday;student1,student2;Struct studentint num; char name20; int age; struct int month; int day; int year; birthday;student1,student2;5. 5. 成員也可以是一個(gè)結(jié)構(gòu)體變量。例:成員也
9、可以是一個(gè)結(jié)構(gòu)體變量。例:結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大結(jié)構(gòu)體類型變量的引用結(jié)構(gòu)體類型變量的引用引用一般形式為:結(jié)構(gòu)體變量名引用一般形式為:結(jié)構(gòu)體變量名.成員名成員名規(guī)則:規(guī)則:1. 不能將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行賦值和輸出;只不能將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行賦值和輸出;只能對(duì)其各個(gè)成員分別輸出。能對(duì)其各個(gè)成員分別輸出。printf(“.”,student1);printf(“ %d”, student1.num); 輸出輸出 10010錯(cuò)!正確!2 .2 .若成員本身又屬一個(gè)結(jié)構(gòu)體類型,只能對(duì)最低級(jí)的成員進(jìn)若成員本身又屬一個(gè)結(jié)構(gòu)體類型,只能對(duì)最低級(jí)的
10、成員進(jìn)行賦值或存取以及運(yùn)算。行賦值或存取以及運(yùn)算。 如:如:student1.birthday.yearstudent1.birthday.year結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大3. 3. 對(duì)成員變量可以象普通變量一樣進(jìn)行各種運(yùn)算,如:對(duì)成員變量可以象普通變量一樣進(jìn)行各種運(yùn)算,如: sumage=student1.age+student2.age;sumage=student1.age+student2.age;4. 4. 可以引用成員的地址,也可以引用結(jié)構(gòu)體變量的地址可以引用成員的地址,也可以引用結(jié)構(gòu)體變量的地址, ,如:如: scanf(scanf(“%d%
11、d”,& student1.num);,& student1.num); printf( printf(“%o%o”,&student1);,&student1); scanf( scanf(“%d,%s,%c,%d,%s%d,%s,%c,%d,%s”,&student1);,&student1);錯(cuò)!錯(cuò)!輸入輸入student1.num的值的值輸出輸出student1的首地址的首地址結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大Struct student int no; char name20; char sex; struct int year; int month; i
12、nt day; birth;Struct student s;設(shè)變量設(shè)變量s中的中的“生日生日”是是“1984年年11月月11日日”,下列對(duì),下列對(duì)“生日生日”的正確賦值方式是:的正確賦值方式是:A)year=1984;month=11;day=11;B)birth.year=1984;birth.month=11;birth.day=11C)s.year=1984;s.month=11;s.day=11D)s.birth.year=1984;s.birth.month=11;s.birth.day=11;練習(xí):已知學(xué)生記錄描述為:練習(xí):已知學(xué)生記錄描述為:結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與
13、枚舉類型-西安交西安交大大結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化 在定義結(jié)構(gòu)體類型變量的同時(shí)對(duì)其每個(gè)成員賦初值在定義結(jié)構(gòu)體類型變量的同時(shí)對(duì)其每個(gè)成員賦初值初始化。初始化。 struct studentlong int num; char name20; char sex; char addr20; a=9801,”Wang hong”,W,”2 Linggong Road”;main( )printf(“No.:%ldnname:%snsex:%cnaddress:%sn”,a.num,,a.sex,a.addr);運(yùn)行結(jié)果為:運(yùn)行結(jié)果為:No.:9801name:Wang hong
14、sex:Waddress:2 Linggong Road結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大9.2 9.2 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組(每個(gè)數(shù)組元素都是一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù))(每個(gè)數(shù)組元素都是一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù))結(jié)構(gòu)體數(shù)組的定義結(jié)構(gòu)體數(shù)組的定義:struct studentint num; char name20; char sex; int age; char addr30; struct studnt stu3;也可直接定義:也可直接定義:struct student int num; stu3;或或struct int num; stu3;結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)
15、體共用體與枚舉類型-西安交西安交大大結(jié)構(gòu)體數(shù)組的引用結(jié)構(gòu)體數(shù)組的引用1 1結(jié)構(gòu)體數(shù)組元素中某一成員的引用結(jié)構(gòu)體數(shù)組元素中某一成員的引用 表示表示stustu的第的第1 1個(gè)元素的個(gè)元素的namename成員項(xiàng)成員項(xiàng) stu4.age stu4.age 表示表示stustu的第的第5 5個(gè)元素的個(gè)元素的ageage成員項(xiàng)成員項(xiàng)2 2結(jié)構(gòu)體數(shù)組元素的賦值結(jié)構(gòu)體數(shù)組元素的賦值 可將一個(gè)結(jié)構(gòu)體數(shù)組元素賦給同一結(jié)構(gòu)體數(shù)組中的另一個(gè)元可將一個(gè)結(jié)構(gòu)體數(shù)組元素賦給同一結(jié)構(gòu)體數(shù)組中的另一個(gè)元素,或者賦給同一類型的變量。素,或者賦給同一類型的變量。 stu1 = stu2;
16、stu1 = stu2; Stu4 = stu5; Stu4 = stu5;注意:結(jié)構(gòu)體數(shù)組元素的輸入和輸出只能將單個(gè)成員項(xiàng)進(jìn)行輸注意:結(jié)構(gòu)體數(shù)組元素的輸入和輸出只能將單個(gè)成員項(xiàng)進(jìn)行輸入和輸出,而不能把結(jié)構(gòu)體數(shù)組元素作為一個(gè)整體直接進(jìn)行入和輸出,而不能把結(jié)構(gòu)體數(shù)組元素作為一個(gè)整體直接進(jìn)行輸入和輸出。輸入和輸出。結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大結(jié)構(gòu)體數(shù)組的初始化結(jié)構(gòu)體數(shù)組的初始化struct studentint num; char name20; char sex; int age; char addr30; stu3=111,”Li”,M,18,”Dalian”
17、,;也可采用:也可采用:struct student int num; ; struct student stu=,;結(jié)構(gòu)體數(shù)組的初始化的一般形式是在結(jié)構(gòu)體數(shù)組的初始化的一般形式是在定義數(shù)組后面加上:定義數(shù)組后面加上: =初值表列初值表列;結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大struct person char name20; int count; leader3=“Li”,0,”zhang”,0,”Liu”,0;main( ) int i, j; char leader_name20; for( i=1;i=10;i+) scanf(“%s”,leader_name
18、); for(j=0;j3;j+) if(strcmp(leader_name,)= =0)leaderj.count+); for(i=0;i3;i+) printf(“%5s:%dn”,,leaderi.count); 判斷是哪一位候選人判斷是哪一位候選人例題:設(shè)有三個(gè)候選人,例題:設(shè)有三個(gè)候選人,每次輸入一個(gè)得票的候選每次輸入一個(gè)得票的候選人的名字,要求最后輸出人的名字,要求最后輸出各人得票結(jié)果。各人得票結(jié)果。結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大計(jì)算學(xué)生的平均成績(jī)和不及計(jì)算學(xué)生的平均成績(jī)和不及格的人數(shù)。格的人數(shù)。
19、struct stuint num;char *name;char sex;float score;boy5=101,Li ping,M,45,102,Zhang ping,M,62.5,103,He fang,F,92.5,104,Cheng ling,F,87,105,Wang ming,M,58,; main()int i,c=0;float ave,s=0;for(i=0;i5;i+)s+=boyi.score;if(boyi.score成員名成員名指向運(yùn)算符。其優(yōu)先級(jí)指向運(yùn)算符。其優(yōu)先級(jí)高于自增、自減運(yùn)算符高于自增、自減運(yùn)算符試分析以下運(yùn)算:試分析以下運(yùn)算:p-n 得到得到p指向的結(jié)
20、構(gòu)體變量中的成員指向的結(jié)構(gòu)體變量中的成員n的值的值p-n+ 得到得到p指向的結(jié)構(gòu)體變量中的成員指向的結(jié)構(gòu)體變量中的成員n的值,的值, 用完后使它加用完后使它加1;+p-n 得到得到p指向的結(jié)構(gòu)體變量中的成員指向的結(jié)構(gòu)體變量中的成員n的值的值 使其先加使其先加1成員運(yùn)算符成員運(yùn)算符結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大指向結(jié)構(gòu)體數(shù)組的指針指向結(jié)構(gòu)體數(shù)組的指針類似與多維數(shù)組中指向一維數(shù)組的指針。例:類似與多維數(shù)組中指向一維數(shù)組的指針。例: #includestring.h #includestdio.h struct student int num; char name20
21、; char sex; int age; ;結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大 struct student stu3=10101, Li Lin, M, 18, 10102, Zhang Fun, M, 19, 10104, Wang Min, F, 20; void main() struct student *p; printf( No. Name Sex agen); for (p=stu; pnum, p-name, p-sex, p-age); 注意:注意:p定義為定義為struct student類型,它只能指向這種類型的結(jié)構(gòu)類型,它只能指向這種類型的
22、結(jié)構(gòu)體變量,而不能指向該類型的成員(體變量,而不能指向該類型的成員(p=&是錯(cuò)誤的)其是錯(cuò)誤的)其它類型的結(jié)構(gòu)體變量。它類型的結(jié)構(gòu)體變量。 結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大用結(jié)構(gòu)體變量和指向結(jié)構(gòu)體的指針作為函數(shù)參數(shù)用結(jié)構(gòu)體變量和指向結(jié)構(gòu)體的指針作為函數(shù)參數(shù)將一個(gè)結(jié)構(gòu)體變量的值傳遞給另一個(gè)函數(shù)有將一個(gè)結(jié)構(gòu)體變量的值傳遞給另一個(gè)函數(shù)有3 3個(gè)方法:個(gè)方法:用結(jié)構(gòu)體變量的成員作參數(shù),將實(shí)參值傳給形參用結(jié)構(gòu)體變量的成員作參數(shù),將實(shí)參值傳給形參 用法和用普通變量作實(shí)參是一樣的,屬于用法和用普通變量作實(shí)參是一樣的,屬于“值傳遞值傳遞”方式。應(yīng)當(dāng)注意實(shí)方式。應(yīng)當(dāng)
23、注意實(shí)參和形參的類型保持一致。參和形參的類型保持一致。2.2.用結(jié)構(gòu)體變量作實(shí)參用結(jié)構(gòu)體變量作實(shí)參 此方法采用的是此方法采用的是“值傳遞值傳遞”的方式,將結(jié)構(gòu)體變量所占的內(nèi)存單元的內(nèi)的方式,將結(jié)構(gòu)體變量所占的內(nèi)存單元的內(nèi)容全部順序傳遞給形參。形參也必須是同類型的結(jié)構(gòu)體變量。在函數(shù)容全部順序傳遞給形參。形參也必須是同類型的結(jié)構(gòu)體變量。在函數(shù)調(diào)用其間形參也要占用內(nèi)存單元。這種傳遞方式在空間和時(shí)間上開(kāi)銷調(diào)用其間形參也要占用內(nèi)存單元。這種傳遞方式在空間和時(shí)間上開(kāi)銷較大。此外,由于采用值傳遞方式,如果在執(zhí)行被調(diào)用函數(shù)其間改變較大。此外,由于采用值傳遞方式,如果在執(zhí)行被調(diào)用函數(shù)其間改變了形參(也是結(jié)構(gòu)體變
24、量)的值,該值不能返回主調(diào)函數(shù),這往往造了形參(也是結(jié)構(gòu)體變量)的值,該值不能返回主調(diào)函數(shù),這往往造成使用上的不便。因此一般較少用這種方法。成使用上的不便。因此一般較少用這種方法。3.3.用指向結(jié)構(gòu)體變量(或數(shù)組)的指針作實(shí)參,將結(jié)構(gòu)體變量(或數(shù)組)用指向結(jié)構(gòu)體變量(或數(shù)組)的指針作實(shí)參,將結(jié)構(gòu)體變量(或數(shù)組)的地址傳給形參。的地址傳給形參。結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大 #includestdio.h #define format %dn%sn%fn%fn%fn struct student int num; char name20; char sex; fl
25、oat score3; ;void main() void print(); struct student stu; stu.num=12345; strcpy(, Li Li); stu.score0=67.5; stu.score1=89; stu.score2=78.6; printf(&stu);void print(p) struct student *p; printf(format, p-num, p-name, p-score0, p-score1, p-score2); printf(n); 結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大9.4
26、 9.4 共用體共用體 共用體是使用覆蓋技術(shù)將幾個(gè)不同類型的變量置于同一段共用體是使用覆蓋技術(shù)將幾個(gè)不同類型的變量置于同一段內(nèi)存,雖然它們各自占的內(nèi)存長(zhǎng)度不同,但起始地址相同。內(nèi)存,雖然它們各自占的內(nèi)存長(zhǎng)度不同,但起始地址相同。共用體定義的一般形式:共用體定義的一般形式:unionunion 共用體名共用體名 成員表列成員表列 變量表列;變量表列;結(jié)構(gòu)體和共用體機(jī)制上的區(qū)別:結(jié)構(gòu)體和共用體機(jī)制上的區(qū)別: 結(jié)構(gòu)體所占內(nèi)存長(zhǎng)度是各成員占的長(zhǎng)度之和。即每個(gè)成員結(jié)構(gòu)體所占內(nèi)存長(zhǎng)度是各成員占的長(zhǎng)度之和。即每個(gè)成員分別占有其自己的內(nèi)存單元。共用體變量所占內(nèi)存長(zhǎng)度是最長(zhǎng)分別占有其自己的內(nèi)存單元。共用體變量所
27、占內(nèi)存長(zhǎng)度是最長(zhǎng)的成員的長(zhǎng)度。的成員的長(zhǎng)度。例如:例如:union aint i; char ch; float f;a, b, c;a.ch=Ha.i=23a.f=1234.4567結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大已知:已知:union int i; char c; float a;test;則:則:sizeof(test)的值是:的值是:4結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大 共用體數(shù)據(jù)的特點(diǎn) 1) 1)同一個(gè)內(nèi)存段可以用來(lái)存放幾種不同類型的成員變量,但在同一個(gè)內(nèi)存段可以用來(lái)存放幾種不同類型的成員變量,但在每個(gè)瞬間只能存放其中一種,而
28、不是同時(shí)存放幾種。起作用的是最每個(gè)瞬間只能存放其中一種,而不是同時(shí)存放幾種。起作用的是最后依次存放的成員。如經(jīng)過(guò)以下三次賦值后,只有后依次存放的成員。如經(jīng)過(guò)以下三次賦值后,只有a.f=1.5a.f=1.5有效。有效。 a.i=1; a.ch=a.i=1; a.ch=a a; a.f=1.5; a.f=1.5; 2) 2)共用體變量的地址和它的各成員的地址都是同一個(gè)地址共用體變量的地址和它的各成員的地址都是同一個(gè)地址 3)3)不能對(duì)共用體變量名賦值。也不能企圖引用變量名得到成員不能對(duì)共用體變量名賦值。也不能企圖引用變量名得到成員值,不能在定義共用體變量時(shí)對(duì)它初始化。下面是錯(cuò)誤的:值,不能在定義共
29、用體變量時(shí)對(duì)它初始化。下面是錯(cuò)誤的:(1) union (1) union int i;int i; char ch; char ch; float f; float f;a=a, a=a, a a, 1.5;, 1.5;(2) a=1;(2) a=1;(3) m=a;(3) m=a;結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大 4) 4)在函數(shù)間傳遞共用體時(shí),只能使用指針的方法。在函數(shù)間傳遞共用體時(shí),只能使用指針的方法。 5)5)共用體類型可以出現(xiàn)在結(jié)構(gòu)體類型定義中,也可以定義共用體類型可以出現(xiàn)在結(jié)構(gòu)體類型定義中,也可以定義共用體數(shù)組。反之,結(jié)構(gòu)體也可以出現(xiàn)在共用體類型定義
30、中,共用體數(shù)組。反之,結(jié)構(gòu)體也可以出現(xiàn)在共用體類型定義中,數(shù)組也可以作為共用體的成員。數(shù)組也可以作為共用體的成員。要作如下表格的數(shù)據(jù)管理,對(duì)教師(要作如下表格的數(shù)據(jù)管理,對(duì)教師(“T T”)要注明職務(wù))要注明職務(wù)(“positionposition”),對(duì)學(xué)生(),對(duì)學(xué)生(“S S”)要注明班級(jí)()要注明班級(jí)(“classclass”)。)。由于數(shù)據(jù)的不完全一致,對(duì)班級(jí)和職務(wù)要用到共用體。由于數(shù)據(jù)的不完全一致,對(duì)班級(jí)和職務(wù)要用到共用體。namenumsexjobClass PositionLi1011 FS501Wang2085 MTprof 結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安
31、交西安交大大struct int num; char name10; char sex; char job; union int class; char position10; category; person2; main() int n, i; for (i=0; i2; i+) scanf(%d %s %c %c, &personi.num, , &personi.sex, &personi.job); if (personi.job=s) scanf(%d, &personi.category.class); else if (personi.job=t) sc
32、anf(%s, personi.category.position); else printf(ninput error!); 結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大printf(n); printf(No. name sex job class/positionn); for (i=0; i2; i+) if (personi.job=s) printf(%-6d%-10s%-3c%-3c%-6dn, personi.num, , personi.sex, personi.job, personi.category.class); else p
33、rintf(%-6d%-10s%-3c%-3c%-6sn, personi.num, , personi.sex, personi.job, personi.category.position); 結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大9.5 9.5 枚舉類型枚舉類型如果變量只有幾種可能的值,可以定義為枚舉類型。它是把變量如果變量只有幾種可能的值,可以定義為枚舉類型。它是把變量的值一一列舉出來(lái)。變量只能取列舉出的值。的值一一列舉出來(lái)。變量只能取列舉出的值。枚舉類型定義一般方法:枚舉類型定義一般方法:enum weekday sun, mon, t
34、ue, wed, thu, fri, sat;變量聲明方法:變量聲明方法:enum weekday workday, week_end;workday和和week_end被定義為枚舉變量,它們只能取值于被定義為枚舉變量,它們只能取值于sun到到sat之一。如:之一。如:workday=mon;week_end=sum;是正確的。是正確的。 結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大1 1在在C C編譯中,對(duì)枚舉按常量處理,故稱枚舉常量。不能對(duì)它們賦值。例如:編譯中,對(duì)枚舉按常量處理,故稱枚舉常量。不能對(duì)它們賦值。例如: Mon = 1; Sun = 7; Mon = 1;
35、Sun = 7; 是錯(cuò)誤的。是錯(cuò)誤的。2 2枚舉元素作為常量,它們是有值的,如果沒(méi)有進(jìn)行初始化,第一個(gè)枚舉元素的枚舉元素作為常量,它們是有值的,如果沒(méi)有進(jìn)行初始化,第一個(gè)枚舉元素的值是值是0 0,第二個(gè)枚舉元素的值為,第二個(gè)枚舉元素的值為1 1,依此類推。例如,對(duì)上述枚舉變量,依此類推。例如,對(duì)上述枚舉變量wordkaywordkay來(lái)說(shuō),來(lái)說(shuō),如下語(yǔ)句:如下語(yǔ)句: workday = Fri;printf(workday = Fri;printf(“%d%d”,workday); ,workday); 輸出結(jié)果是輸出結(jié)果是4 4。也可以改變枚舉元素的值,在定義時(shí)由程序指定,例如:也可以改變枚
36、舉元素的值,在定義時(shí)由程序指定,例如: enum weekday Mon = 1,Tue,Wed,Thu,Fri,Sat,Sun workday;enum weekday Mon = 1,Tue,Wed,Thu,Fri,Sat,Sun workday;定義定義MonMon為為1 1,以后順序加,以后順序加1 1,SunSun為為7 7。3 3枚舉類型變量只能取枚舉元素表中的某個(gè)元素,而不能是其它值。不能把整數(shù)枚舉類型變量只能取枚舉元素表中的某個(gè)元素,而不能是其它值。不能把整數(shù)直接賦給枚舉變梁。例如:直接賦給枚舉變梁。例如:workday = 2 ;workday = 2 ;是錯(cuò)誤的。它們屬于不
37、同的類型。應(yīng)先是錯(cuò)誤的。它們屬于不同的類型。應(yīng)先進(jìn)行強(qiáng)制類型轉(zhuǎn)換才能賦值。例如:進(jìn)行強(qiáng)制類型轉(zhuǎn)換才能賦值。例如:workday = (enum weekday) 2;workday = (enum weekday) 2;甚至可以是表甚至可以是表達(dá)式。例如:達(dá)式。例如:workday = (enum weekday) (5-3);workday = (enum weekday) (5-3);4 4枚舉值可以用來(lái)作判斷比較。例如:枚舉值可以用來(lái)作判斷比較。例如:if (workday = Mon) if (workday = Mon) 枚舉值的比較規(guī)則是:按其在定義時(shí)的順序號(hào)比較。順序號(hào)大,枚舉值
38、也大。如枚舉值的比較規(guī)則是:按其在定義時(shí)的順序號(hào)比較。順序號(hào)大,枚舉值也大。如果果workday = Friworkday = Fri,那么,那么workdayworkday就大于就大于TueTue。 枚舉類型的變量在使用時(shí)要注意以下幾點(diǎn):枚舉類型的變量在使用時(shí)要注意以下幾點(diǎn): 結(jié)構(gòu)體共用體與枚舉類型結(jié)構(gòu)體共用體與枚舉類型-西安交西安交大大例:已知今天是星期日,編寫一個(gè)程序,求若干天后是星期幾。#include void main() int n; enum sun,mon,tue,wed,thu,fri,sat day; char weekday77 = 星期日星期日,星期一星期一,星期二星期二, 星期三星期三,星期四星期四,星期五星期五,星期六星期六; printf(輸入間隔天數(shù)輸入間隔天數(shù):); scanf(%d,&n); day = sun; printf(今天是今天是%s,%d天后是天后是%s.n,we
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年上半年遼寧彰武縣事業(yè)單位招聘高學(xué)歷人才50人重點(diǎn)基礎(chǔ)提升(共500題)附帶答案詳解-1
- 2025年上半年贛州開(kāi)發(fā)區(qū)招考工程技術(shù)人員易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年貴州黔西南州冊(cè)亨縣事業(yè)單位引進(jìn)人才22人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年貴州銅仁市松桃苗族自治縣事業(yè)單位招聘工作人員50人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年貴州貴陽(yáng)鐵路運(yùn)輸法院信息技術(shù)人員招聘重點(diǎn)基礎(chǔ)提升(共500題)附帶答案詳解-1
- 2025年上半年貴州省黔西南望謨縣事業(yè)單位招聘(280人)易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 濟(jì)南二零二五版二手房買賣合同簽訂須知3篇
- 2025年上半年貴州省畢節(jié)市旅游集團(tuán)織金洞公司招聘6人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025年上半年貴州畢節(jié)市七星關(guān)區(qū)面向社會(huì)招聘事業(yè)單位工作人員101人重點(diǎn)基礎(chǔ)提升(共500題)附帶答案詳解-1
- 2025年上半年貴州凱里市事業(yè)單位急需緊缺人才引進(jìn)46人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 中醫(yī)診所內(nèi)外部審計(jì)制度
- 自然辯證法學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2024年國(guó)家危險(xiǎn)化學(xué)品經(jīng)營(yíng)單位安全生產(chǎn)考試題庫(kù)(含答案)
- 護(hù)理員技能培訓(xùn)課件
- 家庭年度盤點(diǎn)模板
- 河南省鄭州市2023-2024學(xué)年高二上學(xué)期期末考試 數(shù)學(xué) 含答案
- 2024年資格考試-WSET二級(jí)認(rèn)證考試近5年真題集錦(頻考類試題)帶答案
- 試卷中國(guó)電子學(xué)會(huì)青少年軟件編程等級(jí)考試標(biāo)準(zhǔn)python三級(jí)練習(xí)
- 公益慈善機(jī)構(gòu)數(shù)字化轉(zhuǎn)型行業(yè)三年發(fā)展洞察報(bào)告
- 飼料廠現(xiàn)場(chǎng)管理類隱患排查治理清單
- 【名著閱讀】《紅巖》30題(附答案解析)
評(píng)論
0/150
提交評(píng)論