![C語言程序設(shè)計(jì)課件第10章_第1頁](http://file4.renrendoc.com/view10/M03/20/13/wKhkGWWJZAuAVkAAAAEKPkmT9s0253.jpg)
![C語言程序設(shè)計(jì)課件第10章_第2頁](http://file4.renrendoc.com/view10/M03/20/13/wKhkGWWJZAuAVkAAAAEKPkmT9s02532.jpg)
![C語言程序設(shè)計(jì)課件第10章_第3頁](http://file4.renrendoc.com/view10/M03/20/13/wKhkGWWJZAuAVkAAAAEKPkmT9s02533.jpg)
![C語言程序設(shè)計(jì)課件第10章_第4頁](http://file4.renrendoc.com/view10/M03/20/13/wKhkGWWJZAuAVkAAAAEKPkmT9s02534.jpg)
![C語言程序設(shè)計(jì)課件第10章_第5頁](http://file4.renrendoc.com/view10/M03/20/13/wKhkGWWJZAuAVkAAAAEKPkmT9s02535.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第10章結(jié)構(gòu)類型[Return]本章學(xué)習(xí)目標(biāo)掌握結(jié)構(gòu)體類型和結(jié)構(gòu)體變量的定義
掌握結(jié)構(gòu)體變量的引用和初始化掌握結(jié)構(gòu)體數(shù)組的定義和初始化掌握指向結(jié)構(gòu)體類型數(shù)據(jù)的指針掌握共用體類型、變量的定義和使用掌握枚舉類型的使用方法掌握使用typedef定義類型的別名本章主要內(nèi)容10.1結(jié)構(gòu)體類型與結(jié)構(gòu)體變量的定義
10.2結(jié)構(gòu)體變量的引用與初始化
10.3結(jié)構(gòu)體數(shù)組
10.4指向結(jié)構(gòu)體類型數(shù)據(jù)的指針
10.5共用體類型
10.6枚舉類型
10.7用typedef定義類型的別名
10.1 結(jié)構(gòu)體類型與結(jié)構(gòu)體變量的定義10.1.1結(jié)構(gòu)體類型的定義通過之前的學(xué)習(xí)我們知道C系統(tǒng)為了方便處理各種數(shù)據(jù)而將這些數(shù)據(jù)根據(jù)種類的不同分成了若干種類型,其中既包括整型、實(shí)型、字符型等基本類型,也包括數(shù)組這樣的構(gòu)造類型。但在很多情況下僅僅只有這些數(shù)據(jù)類型是不夠的,在實(shí)際的應(yīng)用中,經(jīng)常會(huì)遇到這樣的問題:幾個(gè)類型不同的數(shù)據(jù)項(xiàng)之間有著密切地聯(lián)系,它們屬于同一個(gè)整體,常常被用來描述某一事物的幾個(gè)特性。例如,現(xiàn)在編寫程序需要存放學(xué)校所有教職工信息,每位教職工的信息都分為職工號(hào)、姓名、年齡、工資和籍貫等信息項(xiàng),并且這些項(xiàng)都與某一教職工緊密相連。如表10-1所示。從上圖可以看出,每位教職工都有屬于自己的職工號(hào)、姓名、年齡和籍貫,并且這些信息都屬于不同的數(shù)據(jù)類型,因此無法使用數(shù)組來表示(數(shù)組中的各元素必須都屬于同一類型)。而如果將這些信息項(xiàng)分別使用相互獨(dú)立的變量來表示,又無法反映各信息項(xiàng)之間的內(nèi)在聯(lián)系和整體性,并且處理起來也很不方便。因此,C語言提供了一種特殊的數(shù)據(jù)類型,這種數(shù)據(jù)類型可以把不同類型(也可以相同)的數(shù)據(jù)有機(jī)地組織成一個(gè)整體,這個(gè)整體就稱為結(jié)構(gòu)體類型。結(jié)構(gòu)體類型是用戶自定義的一種數(shù)據(jù)描述,主要由組成該結(jié)構(gòu)的各個(gè)數(shù)據(jù)成員構(gòu)成。其定義的一般形式如下:
struct結(jié)構(gòu)體類型名
{
數(shù)據(jù)成員列表
};說明:(1)struct為關(guān)鍵字,不能省略,用來表示定義的數(shù)據(jù)類型為結(jié)構(gòu)體類型。(2)結(jié)構(gòu)體類型名是結(jié)構(gòu)體類型的名字,其命名時(shí)應(yīng)當(dāng)遵循命名規(guī)則。(3)花括弧中的“數(shù)據(jù)成員列表”是指結(jié)構(gòu)體中的各個(gè)數(shù)據(jù)成員,這些數(shù)據(jù)成員有機(jī)地結(jié)合成一個(gè)整體,構(gòu)成了結(jié)構(gòu)體。結(jié)構(gòu)體的各個(gè)數(shù)據(jù)成員都需要定義,其定義形式為:
類型名成員變量名類型名既可以是int、char等基本類型,也可以是一個(gè)結(jié)構(gòu)體類型,但是C語言規(guī)定,結(jié)構(gòu)體類型在定義時(shí)不能包含自身,即不能由自己定義自己;成員變量名命名規(guī)則與普通變量名相同。(4)定義完的結(jié)構(gòu)體類型和系統(tǒng)提供的基本類型具有同樣的作用,都可以用來定義變量。(5)最后的分號(hào)不能省略。例如,表10-1的教職工信息可以定義為結(jié)構(gòu)體類型:
structteacher { longnum;/*職工號(hào)*/ charname[20];/*職工姓名*/ intage;/*職工年齡*/ floatsalary;/*職工工資*/ charaddr[20];/*職工籍貫*/ };※注意:結(jié)構(gòu)體類型和其他基本類型一樣,只是一個(gè)數(shù)據(jù)模型,并沒有具體實(shí)例,系統(tǒng)也不會(huì)為其分配內(nèi)存單元。因此,為了使用結(jié)構(gòu)體類型的數(shù)據(jù),必須先定義結(jié)構(gòu)體類型變量。10.1.2結(jié)構(gòu)體類型變量的定義定義完結(jié)構(gòu)體類型之后就可以定義結(jié)構(gòu)體類型變量了。定義結(jié)構(gòu)體類型變量一般有三種方法:1、先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量。其一般定義形式為:
struct類型名變量名例如: structteachert1,t2;※注意:定義結(jié)構(gòu)體變量時(shí),struct不能省略,既不能寫為teachert1,t2。
2、在定義結(jié)構(gòu)體類型的同時(shí)定義變量。其一般的形式為:
struct結(jié)構(gòu)體類型名
{
數(shù)據(jù)成員列表
}變量名列表;
例如:
structteacher { longnum; charname[20]; intage; floatsalary; charaddr[20]; }t1,t2;※注意:在定義完變量后再加上分號(hào)。
3、省略結(jié)構(gòu)體類型名,直接定義結(jié)構(gòu)體變量。C語言允許使用匿名的結(jié)構(gòu)體類型來定義變量,其一般形式為:
struct {
數(shù)據(jù)成員列表
}變量名列表;例如:
struct { longnum; charname[20]; intage; floatsalary; charaddr[20]; }t1,t2;這種方法雖然簡(jiǎn)單,但是程序無法再次使用這種匿名的結(jié)構(gòu)體類型。關(guān)于結(jié)構(gòu)體類型和變量的補(bǔ)充說明:(1)結(jié)構(gòu)體類型與結(jié)構(gòu)體變量是完全不同的概念,不能對(duì)結(jié)構(gòu)體類型進(jìn)行賦值、運(yùn)算和輸出。(2)系統(tǒng)在編譯時(shí),只對(duì)結(jié)構(gòu)體變量分配內(nèi)存空間,而對(duì)結(jié)構(gòu)體類型不分配空間。(3)結(jié)構(gòu)體變量在內(nèi)存中所占空間大小等于該變量的所有成員變量所占內(nèi)存空間之和,并且這些成員變量在內(nèi)存中是順序存放的。例如,上面定義的結(jié)構(gòu)體structteacher的變量t1所占內(nèi)存空間的大小為:4+20+2+4+20=50字節(jié)。(4)結(jié)構(gòu)體中的成員變量既可以是基本類型變量,也可以是另一個(gè)結(jié)構(gòu)體類型的變量。例如:
structdate { intyear; intmonth; intday; }; structteacher { longnum; charname[20]; intage; floatsalary; charaddr[20];
structdatebirthday;/*birthday是一個(gè)structdate類型的變量*/ };※注意:structdate的定義應(yīng)該放在structteacher的定義前;結(jié)構(gòu)體成員變量的類型不能是正在定義的結(jié)構(gòu)體類型,既structteacher的定義中不能含有structteacher類型的變量,但可以含有正在定義的結(jié)構(gòu)體類型的指針。
10.2 結(jié)構(gòu)體變量的引用與初始化10.2.1結(jié)構(gòu)體類型變量的引用定義完結(jié)構(gòu)體變量后,就可以對(duì)這個(gè)結(jié)構(gòu)體變量進(jìn)行賦值和引用了。但是在引用結(jié)構(gòu)體變量時(shí),不能對(duì)變量整體進(jìn)行引用,只能對(duì)結(jié)構(gòu)體變量中的各成員變量逐個(gè)引用。其引用格式一般為:
結(jié)構(gòu)體變量名.成員變量名這里的“.”稱為成員運(yùn)算符,它是左結(jié)合的,具有最高的優(yōu)先級(jí)。例如,對(duì)上節(jié)中的結(jié)構(gòu)體變量t1的num進(jìn)行賦值:t1.num=1010;在這里需要注意的是,不能將結(jié)構(gòu)體變量作為整體進(jìn)行賦值和輸出。例如,以下的用法是錯(cuò)誤的:
scanf(“%ld%s%d%f%s”,&t1.num,&,&t1.age,&t1.salary,&t1.addr); printf(“%ld,%s,%d,%f,%s”,t1.num,,t1.age,t1.salary,t1.addr);如果結(jié)構(gòu)體變量中又含有其他結(jié)構(gòu)體類型的成員,則在引用時(shí)只能對(duì)其最低級(jí)的成員進(jìn)引用。例如,對(duì)上節(jié)定義的結(jié)構(gòu)體變量t1的成員birthday進(jìn)行賦值:
t1.birthday.year=1978; t1.birthday.month=11; t1.birthday.day=8;結(jié)構(gòu)體類型的成員變量和其他普通變量一樣,也可以進(jìn)行各種合法的運(yùn)算。例如:
t1.num=t2.num; t1.salary=t1.salary+500;同一種類型的結(jié)構(gòu)體變量之間可以整體地進(jìn)行賦值。例如:t1=t2;雖說是整體賦值,實(shí)際是將t2的各成員變量的值依次賦給t1的各成員變量的。
10.2.2結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量在定義的同時(shí),可以對(duì)其各成員變量進(jìn)行初始化操作。例如:struct{ longnum; charname[20]; intage; floatsalary; charaddr[20];}t1={1010,”LiBei”,”28”,”2500.0”,”Beijing”};如果結(jié)構(gòu)體變量還含有其他結(jié)構(gòu)體類型成員,那么在進(jìn)行初始化操作時(shí),應(yīng)該按照最低層類型提供數(shù)據(jù)。例如:structdate{ intyear; intmonth; intday;};structteacher{ longnum; charname[20]; intage; structdatebirthday; floatsalary; charaddr[20]; }t1={1010,”LiBei”,”28”,1978,11,8,”2500.0”,”Beijing”};舉例:/*exam10-1*/#include“stdio.h”main(){structdate{intyear; intmonth; intday;}; structteacher{ longnum; charname[20]; intage; structdatebirthday; floatsalary; charaddr[20]; }t1={1010,”LiBei”,28,1978,11,8,2500.0,”Beijing”};printf(“Num:%ld\nName:%s\nAge:%d\nBirthday:%d-%d-%d\nSalary:%f\nAddr:%s\n”,t1.num,,t1.age,t1.birthday.year,t1.birthday.month,t1.birthday.day,t1.salary,t1.addr);}Num:1010
Name:LiBeiAge:28
Birthday:1978-11-8Salary:2500.0
Addr:Beijing程序運(yùn)行結(jié)果:[Return]10.3結(jié)構(gòu)體數(shù)組10.3.1結(jié)構(gòu)體數(shù)組的定義當(dāng)需要處理多個(gè)相同結(jié)構(gòu)體類型的數(shù)據(jù)時(shí),可以使用結(jié)構(gòu)體數(shù)組。結(jié)構(gòu)體數(shù)組和普通數(shù)組一樣,都可以順序存放數(shù)據(jù),只是結(jié)構(gòu)體數(shù)組中的每個(gè)元素都是同一類型的結(jié)構(gòu)體變量。結(jié)構(gòu)體數(shù)組的定義方式和結(jié)構(gòu)體變量的定義方式相同,也可以分為三種:(1)先定義類型,再定義數(shù)組。例如:
structteacher { …… }; structteachert[10];(2)在定義類型的同時(shí),定義數(shù)組。例如:
structteacher { …… }t[10];(3)不定義類型,直接定義數(shù)組。例如:
structteacher { …… }t[10];定義完結(jié)構(gòu)體數(shù)組后,就可以使用下標(biāo)法來訪問各數(shù)組元素了。其一般方法為:
結(jié)構(gòu)體數(shù)組名[下標(biāo)].成員變量名例如:
t[3].num=10020; printf(“%f”,t[3].salary);10.3.2結(jié)構(gòu)體數(shù)組的初始化結(jié)構(gòu)體數(shù)組的初始化方法如下: structteachert[3]={{1010,”LiBei”,28,2500.0,”Beijing”},{1011,”ZhangXia”,31,3000.0,”Shanghai”},{1012,”WangDong”,25,2800.0,”Guangzhou”}};如果在初始化的時(shí)候,沒有對(duì)某個(gè)數(shù)組元素的成員變量賦初值,則系統(tǒng)在編譯時(shí)會(huì)自動(dòng)地將0賦給數(shù)值型變量,將’\0’賦給字符型變量。除此之外還可以在結(jié)構(gòu)體類型定義的時(shí)候?qū)Y(jié)構(gòu)體數(shù)組進(jìn)行賦初值。例如: structteacher { …… }t[3]={{1010,”LiBei”,28,2500.0,”Beijing”},{1011,”ZhangXia”,31,3000.0,”Shanghai”},{1012,”WangDong”,25,2800.0,”Guangzhou”}};[Return]10.4指向結(jié)構(gòu)體類型數(shù)據(jù)的指針10.4.1指向結(jié)構(gòu)體變量的指針
結(jié)構(gòu)體變量在內(nèi)存中有對(duì)應(yīng)的地址空間,其地址的值就是該變量所占內(nèi)存空間的起始地址。因此我們可以定義一個(gè)指針變量來指向該結(jié)構(gòu)體變量,即指針變量存放的值是結(jié)構(gòu)體變量在內(nèi)存中的起始地址。1、定義結(jié)構(gòu)體指針變量的一般定義形式為:struct結(jié)構(gòu)體類型名﹡指針變量名 例如:structteacher﹡p;定義完結(jié)構(gòu)體指針變量后就可以使該變量指向同類型的結(jié)構(gòu)體變量。例如: structteacher﹡p,t1; p=&t1;/*p指向t1*/2、引用和其他的指針變量一樣,我們可以通過結(jié)構(gòu)體指針變量間接引用它所指向變量的數(shù)據(jù)成員。其引用的方法一般有兩種:(1)通過(﹡指針變量名).成員變量名的方法來引用。例如:
(﹡p).num=1001; printf(“%ld”,(﹡p).num);這里的(﹡p).num等價(jià)于t1.num。除此之外還需要注意的是,由于成員運(yùn)算符“.”的優(yōu)先級(jí)高于“﹡”運(yùn)算符,因此指針變量名外邊的括號(hào)不能省略,否則﹡p.num就等價(jià)于﹡(p.num)了。(2)通過指針變量名—>成員變量名的方法來引用(“—>”為指向成員運(yùn)算符)。例如:
p—>num=1001; printf(“%ld”,p—>num);這種引用方法的效果和(﹡p).num的效果是相同的,只是采用p—>num來引用結(jié)構(gòu)體變量的成員時(shí)顯得更加直觀和方便。例10-3輸出結(jié)構(gòu)體變量的各成員的值/*exam10-3*/#include“stdio.h”main(){structteacher{longnum;charname[20];intage;floatsalary;}; structteachert,﹡p;p=&t;t.num=1011;strcpy(,”LiWei”);t.age=32;t.salary=2800.0;printf(“Num:%ld\nName:%s\nAge:%d\nSalary:%f\n”,t.num,,t.age,t.salary);printf(“Num:%ld\nName:%s\nAge:%d\nSalary:%f\n”,(﹡p).num,(﹡p).name,(﹡p).age,(﹡p).salary);printf(“Num:%ld\nName:%s\nAge:%d\nSalary:%f\n”,p—>num,p—>name,p—>age,p—>salary);}[演示]10.4.2指向結(jié)構(gòu)體數(shù)組的指針
和普通數(shù)組一樣,對(duì)于結(jié)構(gòu)體數(shù)組也可以使用指針變量來指向。如果一個(gè)指針變量存放的是一個(gè)結(jié)構(gòu)體數(shù)組的首地址,則稱該指針變量指向這個(gè)結(jié)構(gòu)體數(shù)組。例如: structteachert[3],﹡p;p=t;C語言規(guī)定數(shù)組名代表數(shù)組元素的首地址,因此將結(jié)構(gòu)體數(shù)組t的首地址賦給指針變量p,p就指向了數(shù)組t的首元素t[0],然后就可以通過指針變量的移動(dòng)來訪問其他的數(shù)組元素了。例如:p指向數(shù)組t的首元素,則p+1就指向數(shù)組元素t[1],依次類推,p+i指向數(shù)組元素t[i]。其指向關(guān)系見圖10-1。如果需要通過指針變量來訪問某個(gè)數(shù)組元素的成員變量,可以將指針變量指向該數(shù)組元素,然后通過“(﹡指針變量).成員變量”或“(﹡指針變量)—>成員變量”的方式進(jìn)行訪問。例10-4通過指向結(jié)構(gòu)體數(shù)組的指針變量來訪問結(jié)構(gòu)體數(shù)組的各元素。/*exam10-4*/#include“stdio.h”main(){structteacher{ longnum; charname[20]; intage; floatsalary;}t[3]={{1010,”LiWei”,32,2500.0},{1011,”ZhangLei”,28,2000.0},{1012,”WuNan”,26,2200.0}}; structteacher﹡p;for(p=t;p<t+3;p++){printf(“Num:%ldName:%sAge:%dSalary:%f\n”,p—>num,p—>name,p—>age,p—>salary);}}[演示]※注意:由于p是一個(gè)指向structteacher類型的指針變量,因此只能指向structteacher類型的數(shù)據(jù),而不能指向t數(shù)組元素中的某一成員。例如,以下的程序是錯(cuò)誤的:p=&t[0].num;[Return]10.5共用體類型10.5.1共用體類型的定義
除了結(jié)構(gòu)體以外,C語言還提供了一種構(gòu)造類型:共用體。與結(jié)構(gòu)體類似,用戶也可以在共用體中定義多種不同數(shù)據(jù)類型的成員。其一般定義形式為: union共用體類型名
{
成員變量列表
};說明:union為關(guān)鍵字,用來聲明用戶定義的是一個(gè)共用體類型,而成員列表表示的是共用體類型中所含有的各成員變量。例如,定義一個(gè)共用體類型data:
uniondata { inti; charc; floatf; };共用體與結(jié)構(gòu)體之間的區(qū)別共用體與結(jié)構(gòu)體最大的不同在于其成員變量所占的內(nèi)存長(zhǎng)度不同:結(jié)構(gòu)體變量所占的內(nèi)存長(zhǎng)度等于各成員變量所占的內(nèi)存長(zhǎng)度之和,即每個(gè)成員變量都有屬于自己的內(nèi)存空間;共用體變量的各成員變量都共享同一塊內(nèi)存空間,即共用體變量所占的內(nèi)存長(zhǎng)度等于其最長(zhǎng)的成員變量所占的內(nèi)存長(zhǎng)度。例如,上面定義的共用體類型data含有三個(gè)成員:inti、charc、floatf,由于floatf所占的內(nèi)存長(zhǎng)度最長(zhǎng),因此其他的兩個(gè)成員都共享f的內(nèi)存空間(見圖10-2),即共用體data的變量所占內(nèi)存長(zhǎng)度就等于其成員f所占的內(nèi)存長(zhǎng)度。※注意:共用體采用了覆蓋技術(shù),各成員變量互相覆蓋,達(dá)到共享同一段內(nèi)存的目的,這么做的最大好處是可以大大節(jié)省內(nèi)存空間。10.5.1共用體變量的定義
1、先定義共用體類型,再定義共用體變量。其一般定義形式為:
union類型名變量名例如:uniondataa,b;2、在定義共用體類型的同時(shí)定義變量。其一般的形式為:
union共用體類型名
{
成員列表
}變量名列表;例如:
uniondata { inti; charc; floatf; }a,b;3、省略共用體類型名,直接定義變量。
union {
成員列表
}變量名列表;例如:
union { inti; charc; floatf; }a,b;10.5.2共用體變量的引用
定義完共用體變量后,就可以對(duì)該變量進(jìn)行引用了。共用體變量的引用和結(jié)構(gòu)體變量的引用方式類似,但是不能引用共用體變量整體,而只能引用共用體變量中的成員。例如,引用共用體變量a中的成員:
scanf(“%d”,&a.i); printf(“%d”,a.i);在共用體變量的引用時(shí),應(yīng)該注意以下幾點(diǎn):(1)由于共用體變量的所有成員都共用同一內(nèi)存,因此在某一時(shí)刻只能存放其中的一個(gè)成員,即某一時(shí)刻只有一個(gè)成員起作用,而其他的成員都不起作用。例如,在執(zhí)行完以下語句后:
a.i=10; a.c=’d’; a.f=14.8;共用體所占的內(nèi)存中存放的數(shù)據(jù)是14.8。因此可以看出,共用體變量在存放成員時(shí)采用的是覆蓋技術(shù),即在共用體變量中有意義的成員是最后一次存放的成員,任何新數(shù)據(jù)的存入都會(huì)覆蓋掉原有的數(shù)據(jù)。(2)不能對(duì)共用體變量名賦值,也不能在定義共用體變量時(shí)對(duì)共用體變量進(jìn)行初始化。例如,以下程序是錯(cuò)誤的:
union { inti; charc; floatf; }a={10,’a’,5.6};(3)可以通過指針變量引用共用體變量中的成員。例如:
uniondata﹡p,a; p=&a; p—>i=10;(4)不能將共用體變量作為函數(shù)參數(shù),函數(shù)也不能返回共用體變量。(5)結(jié)構(gòu)體類型和共用體類型在定義時(shí)可以互相嵌套?!灿皿w變量最大的用途是將不可能同時(shí)出現(xiàn)的數(shù)據(jù)項(xiàng)放在同一段內(nèi)存當(dāng)中,從而達(dá)到節(jié)省內(nèi)存空間的目的。
[Return]10.6枚舉類型在實(shí)際的應(yīng)用中,某些變量的取值范圍可能很小,可能只有僅僅幾個(gè)值。例如表示方向、顏色、一周中的周一至周日等。C語言為了增加程序的可讀性,在ANSIC標(biāo)準(zhǔn)后加入了“枚舉”類型,在這里枚舉的意思是將某種變量可能取的值一一列舉出來,因此如果一個(gè)變量被定義成枚舉類型,那么該變量所能取的值只能是枚舉類型中所列出的值。枚舉類型的一般定義形式如下:
enum枚舉類型名{枚舉元素1,枚舉元素2,…,枚舉元素n};例如:
enumcolor{red,green,blue};以上定義了一個(gè)枚舉類型color,根據(jù)該類型可以定義枚舉變量,枚舉變量的取值范圍只能是“red、green、blue”中的某一值。
枚舉變量的定義形式可以分為三種:(1)先定義枚舉類型后定義枚舉變量。例如:
enumcolor{red,green,blue}; colora,b;(2)定義枚舉類型的同時(shí)定義變量。例如:
enumcolor{red,green,blue}a,b;(3)定義匿名枚舉變量。例如:
enum{red,green,blue}a,b;
當(dāng)使用枚舉變量時(shí),需要注意以下幾點(diǎn):(1)在給枚舉變量賦值時(shí),只能將定義枚舉類型時(shí)所列出的元素值賦給該變量。例如:
a=red; b=blue;(2)枚舉類型所列出的元素值并不是字符串,而是整型常量,并且這些常量都是有值的,C語言在進(jìn)行編譯時(shí),會(huì)按照定義的順序?qū)⑺鼈兊闹抵脼?、1、2、…,因此枚舉元素又通常被稱為枚舉常量。例如,上面定義的枚舉類型color中各枚舉常量的值分別為:red為0,green為1,blue為2。并且這些枚舉常量的值還可以以整數(shù)的形式輸出。例如:
colora; a=green; printf(“%d”,a);/*輸出的結(jié)果為2*/(3)不能將非枚舉常量之外的值賦給枚舉變量。例如,以下語句是錯(cuò)誤的:a=3;(4)枚舉常量可以參與整數(shù)運(yùn)算,可以進(jìn)行算術(shù)、關(guān)系等運(yùn)算。例如:
if(red>green) prinf(“right!”);※從上面可以看出,枚舉常量實(shí)際就是整型常量,那么它們還有什么必要存在呢?實(shí)際上使用枚舉類型主要能帶來兩點(diǎn)好處:一是枚舉常量限定了變量的取值范圍。例如,上面定義的枚舉變量a只能取red,green和blue其中之一的值;再次使用枚舉常量可以增加程序的可讀性。例如,定義一個(gè)含有每周七天的枚舉類型:
enumweek{mon,tue,wed,thu,fri,sat,sun}today;在這里使用today=mon;就要比today=1;的可讀性要強(qiáng)的多。
例10-6枚舉類應(yīng)用舉例。/*exam10-6*/#include“stdio.h”main(){enumcolor{red,green,blue,black};enumcolorc;for(c=red;c<=black;c++){ if(c==red)printf(“Itisred\n”); elseif(c==green) pri
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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é)類專業(yè)理論考試題庫(kù)(含答案)
- 2025年畢節(jié)職業(yè)技術(shù)學(xué)院高職單招語文2018-2024歷年參考題庫(kù)頻考點(diǎn)含答案解析
- 2025年武漢工貿(mào)職業(yè)學(xué)院高職單招語文2018-2024歷年參考題庫(kù)頻考點(diǎn)含答案解析
- 2024喜劇綜藝年度報(bào)告
- 2025春季新學(xué)期,中小學(xué)校長(zhǎng)在全體教師大會(huì)上發(fā)言:從電影《熊出沒重啟未來》破局解鎖新學(xué)期教育密碼
- 10kV配電站房工程的電氣設(shè)計(jì)方案與性能分析
- 幼兒園組織活動(dòng)設(shè)計(jì)策劃方案五篇
- 商業(yè)街店面租賃合同范本
- 幼兒園中班冬季教育活動(dòng)策劃方案五篇
- 2024年綠色能源產(chǎn)業(yè)投資合作合同
- 2025-2030年中國(guó)納米氧化鋁行業(yè)發(fā)展前景與投資戰(zhàn)略研究報(bào)告新版
- 2025年度正規(guī)離婚協(xié)議書電子版下載服務(wù)
- 2025年貴州蔬菜集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 2025光伏組件清洗合同
- 電力電纜工程施工組織設(shè)計(jì)
- 2024年網(wǎng)格員考試題庫(kù)完美版
- 《建筑與市政工程防水規(guī)范》解讀
- 2024年重慶市中考數(shù)學(xué)試題B卷含答案
- 醫(yī)生給病人免責(zé)協(xié)議書(2篇)
- 人教版(2024年新教材)七年級(jí)上冊(cè)英語Unit 7 Happy Birthday 單元整體教學(xué)設(shè)計(jì)(5課時(shí))
- 口腔粘膜常見疾病
評(píng)論
0/150
提交評(píng)論