第9章結(jié)構(gòu)體與共用體_第1頁(yè)
第9章結(jié)構(gòu)體與共用體_第2頁(yè)
第9章結(jié)構(gòu)體與共用體_第3頁(yè)
第9章結(jié)構(gòu)體與共用體_第4頁(yè)
第9章結(jié)構(gòu)體與共用體_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第9章 用戶自己建立數(shù)據(jù)類型概述結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體數(shù)組指向結(jié)構(gòu)體類型數(shù)據(jù)的指針共用體結(jié)構(gòu)體與鏈表枚舉類型用typedef定義類型9.1 9.1 概述概述&結(jié)構(gòu)體是一種結(jié)構(gòu)體是一種構(gòu)造構(gòu)造數(shù)據(jù)類型數(shù)據(jù)類型&用途:把用途:把不同類型不同類型的數(shù)據(jù)組合成一個(gè)整體的數(shù)據(jù)組合成一個(gè)整體n結(jié)構(gòu)體類型定義結(jié)構(gòu)體類型定義struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型名類型名1 成員名成員名1; 類型名類型名2 成員名成員名2; .;成員類型可以是成員類型可以是基本型或構(gòu)造型基本型或構(gòu)造型struct是是關(guān)鍵字關(guān)鍵字, ,不能省略不能省略合法標(biāo)識(shí)符合法標(biāo)識(shí)符可省可省:

2、無名結(jié)構(gòu)體無名結(jié)構(gòu)體例例 struct student int num; char name20; char sex; int age; float score; char addr30; ; 例子圖解例子圖解n先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量n一般形式:一般形式: struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型名類型名 1 成員名成員名1; 類型名類型名2 成員名成員名2; .;struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 變量名表列變量名表列;9.1.2結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義例例 struct student int num; char name20; char se

3、x; int age; float score; char addr30; ; struct student stu1,stu2; namenumsexagescoreaddr2字節(jié)字節(jié)2字節(jié)字節(jié)20字節(jié)字節(jié)1字節(jié)字節(jié)4字節(jié)字節(jié)30字節(jié)字節(jié).n定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量n一般形式:一般形式:struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型名類型名1 成員名成員名2; 類型名類型名1 成員名成員名2; .變量名表列變量名表列;例例 struct student int num; char name20; char sex; int age; float score;

4、 char addr30; stu1,stu2; struct 類型名類型名1 成員名成員名2; 類型名類型名1 成員名成員名2; .變量名表列變量名表列;例例 struct int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; n直接定義結(jié)構(gòu)體變量直接定義結(jié)構(gòu)體變量n一般形式:一般形式:A) struct student int num; float age; ; struct student std1;以下對(duì)結(jié)構(gòu)體類型變量的定義中不正確的是:以下對(duì)結(jié)構(gòu)體類型變量的定義中不正確的是:B) s

5、truct student int num; float age; std1 ;D) struct int num; float age; std1 ;C) struct int num; float age; student;struct student std1; n說明說明:n結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同n結(jié)構(gòu)體可嵌套結(jié)構(gòu)體可嵌套例例 struct date int month; int day; int year; ; struct student int num; char name20; struct date birthday; stu;numna

6、mebirthdaymonthdayyear 結(jié)構(gòu)體成員名與程序中變量名可相同,不會(huì)混淆結(jié)構(gòu)體成員名與程序中變量名可相同,不會(huì)混淆結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量的引用n引用規(guī)則引用規(guī)則n 結(jié)構(gòu)體變量結(jié)構(gòu)體變量不能作為一整體進(jìn)行輸入輸出不能作為一整體進(jìn)行輸入輸出,只能分別引只能分別引用用成員成員變量變量成員成員(分量分量)運(yùn)算符運(yùn)算符優(yōu)先級(jí)優(yōu)先級(jí): 1結(jié)合性結(jié)合性:從左向右從左向右引用方式:引用方式: 結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名.成員名成員名例例 struct student int num; char name20; char sex; int age; float score; char addr

7、30; stu1; printf(“%d,%s,%c,%d,%f,%sn”,stu1); ( )stu1.num=10;stu1.score=85.5; stu1.num+;例例struct date int month; int day; int year; ; struct student int num; char name20; struct date birthday; stu1;numnamebirthdaymonthdayyearstu1.birthday.month=12;n 結(jié)構(gòu)體嵌套時(shí)結(jié)構(gòu)體嵌套時(shí)逐級(jí)引用逐級(jí)引用n形式一:形式一:struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型名類型名

8、1 成員名成員名2; 類型名類型名1 成員名成員名2; .;struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 結(jié)構(gòu)體變量結(jié)構(gòu)體變量=初始數(shù)據(jù)初始數(shù)據(jù);例例 struct student int num; char name20; char sex; int age; char addr30; ; struct student stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;9.1.3 結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型名類型名1 成員名成員名2; 類型名類型名1 成員名成員名2; .結(jié)構(gòu)體變量結(jié)構(gòu)體變量=初始數(shù)據(jù)初始數(shù)據(jù);例例 st

9、ruct student int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; n結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化形式二:形式二:struct 類型名類型名1 成員名成員名2; 類型名類型名1 成員名成員名2; .結(jié)構(gòu)體變量結(jié)構(gòu)體變量=初始數(shù)據(jù)初始數(shù)據(jù);例例 struct int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Bei

10、jing Road”; n結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化形式三:形式三:n結(jié)構(gòu)體數(shù)組的定義結(jié)構(gòu)體數(shù)組的定義三種形式:三種形式:形式一形式一: : struct student int num; char name20; char sex; int age; ;struct student stu2;形式二形式二: : struct student int num; char name20; char sex; int age; stu2;形式三形式三: struct int num; char name20; char sex; int age; stu2;numnamesexagenu

11、mnamesexagestu0stu125B9.2 結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組n結(jié)構(gòu)體數(shù)組初始化結(jié)構(gòu)體數(shù)組初始化順序初始化順序初始化: struct student stu3=100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19; 分行初始化分行初始化: struct student int num; char name20; char sex; int age; ;struct student stu3=100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19; 全部初始

12、化時(shí)維數(shù)可省全部初始化時(shí)維數(shù)可省n結(jié)構(gòu)體數(shù)組引用結(jié)構(gòu)體數(shù)組引用引用方式:引用方式: 結(jié)構(gòu)體數(shù)組名結(jié)構(gòu)體數(shù)組名下標(biāo)下標(biāo).成員名成員名 struct student int num; char name20; char sex; int age; stu3;stu1.age+;strcpy(, “ ZhaoDan”);#include struct person char name20; int count;leader3=“Li”,0,“Zhang”,0, “Wang”,0; main() int i,j; char leader_name20; for(i=0;i10;i+)

13、 scanf(%s,leader_name); for(j=0;j3;j+)if(strcmp(leader_name,)=0) leaderj.count+; for(i=0;i成員名成員名結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名.成員名成員名指向運(yùn)算符指向運(yùn)算符優(yōu)先級(jí)優(yōu)先級(jí): 1: 1結(jié)合方向:從左向右結(jié)合方向:從左向右例例 指向結(jié)構(gòu)體的指針變量指向結(jié)構(gòu)體的指針變量例例 int n; int *p=&n; n使用使用結(jié)構(gòu)體指針變量引用成員形式結(jié)構(gòu)體指針變量引用成員形式p304*p=10; n=10;(*p).num=10; stu.num=10;#include void

14、main() struct student long int num; char name20; char sex; float score; stu_1,*p; p=&stu_1; stu_1.num=89101; strcpy(stu_1.name,Li Lin); p-sex=M; p-score=89.5; printf(No:%ldnname:%snsex:%cnscore:%fn, (*p).num,p-name,stu_1.sex,p-score);運(yùn)行結(jié)果運(yùn)行結(jié)果:No:89101name:Li Linsex:Mscore:89.5struct student int

15、number; char name20; int math; int english; ;struct student stu3=10101,Li-Ming,90,80, 10102,Zhang- Hua,70,75, 10103,Wang-Ning,87,65; main() struct student *p; for(p=stu;pnumber, p- name);printf(%d %d, p-math, p-english); printf( n); n指向結(jié)構(gòu)體數(shù)組的指針指向結(jié)構(gòu)體數(shù)組的指針10101Li-Ming9080stu0stu1stu210102Zhang-Hua7075

16、10103Wang-Ning8765ppp 用結(jié)構(gòu)體變量和指向結(jié)構(gòu)體的指針作函數(shù)參數(shù)用結(jié)構(gòu)體變量和指向結(jié)構(gòu)體的指針作函數(shù)參數(shù)struct data int a, b, c; ;main() void func(struct data); struct data arg; arg.a=27; arg.b=3; arg.c=arg.a+arg.b; printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c); func(arg); printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c);void f

17、unc(struct data parm) parm.a=18; parm.b=5; parm.c=parm.a*parm.b;例例 用結(jié)構(gòu)體變量作函數(shù)參數(shù)(用結(jié)構(gòu)體變量作函數(shù)參數(shù)(1 1)arga :27b: 3c :30(main)arga :27b: 3c :30(main)(func)parma :27b: 3c :30arga :27b: 3c :30(main)(func)parma :18b: 5c :90arga :27b: 3c :30(main)struct data int a, b, c; ;main() void func(struct data *parm); st

18、ruct data arg; arg.a=27; arg.b=3; arg.c=arg.a+arg.b; printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c); func(&arg); printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c);void func(struct data *parm) parm-a=18; parm-b=5; parm-c=parm-a*parm-b;例例 用結(jié)構(gòu)體指針變量作函數(shù)參數(shù)(用結(jié)構(gòu)體指針變量作函數(shù)參數(shù)(2 2)arga :18b: 5c :9

19、0(main)arga :27b: 3c :30(main)arga :27b: 3c :30(main)(func)parm*arga :18b: 5c :90(main)(func)parm*9.4 用指針處理鏈表n用數(shù)組存放數(shù)據(jù)時(shí),必須事先定義固定的長(zhǎng)度,數(shù)組元素在內(nèi)存中也是連續(xù)存放的,若元素個(gè)數(shù)不確定,則長(zhǎng)度必須足夠大,造成內(nèi)存的浪費(fèi)。n鏈表則不同,它根據(jù)需要開辟內(nèi)存單元,鏈表中各數(shù)據(jù)成員在內(nèi)存中可以不是連續(xù)存放的??梢杂盟鼇泶鏀?shù)組元素個(gè)數(shù)不確定的數(shù)組。 n鏈表必須利用指針變量才能實(shí)現(xiàn),單向鏈表包含一個(gè)指針,用來存放下一個(gè)結(jié)點(diǎn)的首地址。(雙鏈表包含兩個(gè)指針,一個(gè)用來指向它后面的結(jié)點(diǎn),

20、一個(gè)用來指向它前面的結(jié)點(diǎn))鏈表概述單向鏈表的結(jié)構(gòu)形式單向鏈表的結(jié)構(gòu)形式如下圖所示單向鏈表的結(jié)構(gòu)形式如下圖所示1356A1475B1021CNULLD1249head 鏈表有一個(gè)鏈表有一個(gè)“頭指針頭指針”變量,存放一個(gè)地址,變量,存放一個(gè)地址,該地址指向鏈表中的第一個(gè)元素。該地址指向鏈表中的第一個(gè)元素。 鏈表中每一個(gè)元素稱為鏈表中每一個(gè)元素稱為結(jié)點(diǎn)結(jié)點(diǎn),每個(gè)結(jié)點(diǎn)都應(yīng),每個(gè)結(jié)點(diǎn)都應(yīng)包括兩個(gè)部分:一為用戶需要用的實(shí)際數(shù)據(jù),二包括兩個(gè)部分:一為用戶需要用的實(shí)際數(shù)據(jù),二為下一個(gè)結(jié)點(diǎn)的地址。為下一個(gè)結(jié)點(diǎn)的地址。 鏈表中最后一個(gè)元素稱為鏈表中最后一個(gè)元素稱為表尾表尾,它不再指向,它不再指向其他元素,它的地址

21、部分為其他元素,它的地址部分為NULL。在語(yǔ)言中,用結(jié)構(gòu)類型來描述結(jié)點(diǎn)結(jié)構(gòu)。例如: struct student int num;/*學(xué)號(hào)學(xué)號(hào)*/ int score;/*成績(jī)成績(jī)*/ struct student *next;/*指針域指針域*/ ;鏈表的數(shù)據(jù)結(jié)構(gòu),必須利用指針變量才能實(shí)現(xiàn)。語(yǔ)言對(duì)鏈表結(jié)點(diǎn)的結(jié)構(gòu)描述語(yǔ)言對(duì)鏈表結(jié)點(diǎn)的結(jié)構(gòu)描述 簡(jiǎn)單鏈表簡(jiǎn)單鏈表#define NULL 0 struct student int num; float score; struct student *next; ; main() struct student a, b, c, *head, *p; a.

22、num=1001; a.score=89.5; b.num=1002; b.score=90; c.num=1006; c.score=85; head=&a; a.next=&b; b.next=&c; c.next=NULL; p=head; do printf(%d %5.1fn, p-num, p-score); p=p-next; while (p!=NULL); 例:建立一個(gè)如右圖所示的簡(jiǎn)單鏈表,它由例:建立一個(gè)如右圖所示的簡(jiǎn)單鏈表,它由3 3個(gè)學(xué)生數(shù)據(jù)的個(gè)學(xué)生數(shù)據(jù)的結(jié)點(diǎn)組成并輸出各結(jié)點(diǎn)中的數(shù)據(jù)。結(jié)點(diǎn)組成并輸出各結(jié)點(diǎn)中的數(shù)據(jù)。89.5100190100285

23、1006numscorenextNULL處理動(dòng)態(tài)鏈表所需庫(kù)函數(shù)處理動(dòng)態(tài)鏈表所需庫(kù)函數(shù)malloc函數(shù)函數(shù)函數(shù)原型:函數(shù)原型:void *malloc(unsigned int size)作用:在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一個(gè)長(zhǎng)度為作用:在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一個(gè)長(zhǎng)度為size的連續(xù)空間的連續(xù)空間返回值:成功,指向分配區(qū)域起始地址的指針;失敗,返回值:成功,指向分配區(qū)域起始地址的指針;失敗,NULL。calloc函數(shù)函數(shù)函數(shù)原型:函數(shù)原型:void *calloc(int n, unsigned size)作用:在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配作用:在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配n個(gè)長(zhǎng)度為個(gè)長(zhǎng)度為size的連續(xù)

24、空間的連續(xù)空間返回值:成功,指向分配區(qū)域起始地址的指針;失敗,返回值:成功,指向分配區(qū)域起始地址的指針;失敗,NULL。free函數(shù)函數(shù)函數(shù)原型:函數(shù)原型:void free(void *p)作用:釋放由作用:釋放由p指向的內(nèi)存區(qū)指向的內(nèi)存區(qū)基本思路:基本思路: 定義好所需的結(jié)構(gòu)體類型,用求字節(jié)數(shù)運(yùn)算符定義好所需的結(jié)構(gòu)體類型,用求字節(jié)數(shù)運(yùn)算符“sizeof()”求出該結(jié)構(gòu)體類型求出該結(jié)構(gòu)體類型數(shù)據(jù)所占用的長(zhǎng)度。并定義三個(gè)指向結(jié)構(gòu)體類型的指針數(shù)據(jù)所占用的長(zhǎng)度。并定義三個(gè)指向結(jié)構(gòu)體類型的指針head,p1,p2。 首先向系統(tǒng)用首先向系統(tǒng)用malloc( )函數(shù)申請(qǐng)一個(gè)結(jié)點(diǎn)的空間,函數(shù)申請(qǐng)一個(gè)結(jié)點(diǎn)的

25、空間,并使并使p1指向它指向它 輸入該結(jié)點(diǎn)數(shù)據(jù)域的數(shù)據(jù)項(xiàng),并將指針域置為空,最后將該結(jié)點(diǎn)接到輸入該結(jié)點(diǎn)數(shù)據(jù)域的數(shù)據(jù)項(xiàng),并將指針域置為空,最后將該結(jié)點(diǎn)接到p2所指所指向的結(jié)點(diǎn)后面。向的結(jié)點(diǎn)后面。3個(gè)指針變量個(gè)指針變量head、p1和和p2的說明如下:的說明如下:v head頭指針變量,指向鏈表的第一個(gè)結(jié)點(diǎn)。頭指針變量,指向鏈表的第一個(gè)結(jié)點(diǎn)。v p1指向新申請(qǐng)的結(jié)點(diǎn)。指向新申請(qǐng)的結(jié)點(diǎn)。v p2指向鏈表的尾結(jié)點(diǎn)。指向鏈表的尾結(jié)點(diǎn)。 建立動(dòng)態(tài)鏈表是指,從無到有地建立起一個(gè)鏈表,即一個(gè)一個(gè)建立動(dòng)態(tài)鏈表是指,從無到有地建立起一個(gè)鏈表,即一個(gè)一個(gè)地開辟結(jié)點(diǎn)和輸入各結(jié)點(diǎn)數(shù)據(jù),并建立起前后相鏈的關(guān)系。地開辟結(jié)點(diǎn)

26、和輸入各結(jié)點(diǎn)數(shù)據(jù),并建立起前后相鏈的關(guān)系。例:建立一個(gè)學(xué)生數(shù)據(jù)的單向鏈表。如果輸入的學(xué)號(hào)為例:建立一個(gè)學(xué)生數(shù)據(jù)的單向鏈表。如果輸入的學(xué)號(hào)為0,則建,則建立過程結(jié)束。立過程結(jié)束。 建立動(dòng)態(tài)鏈表建立動(dòng)態(tài)鏈表#include #define NULL 0#define LEN sizeof(struct student) struct student long num; float score; struct student *next; int n=0; /*n為外部變量,代表結(jié)點(diǎn)個(gè)數(shù)為外部變量,代表結(jié)點(diǎn)個(gè)數(shù)*/struct student *creat( ) /*定義函數(shù),它將帶回一個(gè)指向鏈表頭

27、的指針定義函數(shù),它將帶回一個(gè)指向鏈表頭的指針*/ struct student *head; struct student *p1,*p2; p1=(struct student*)malloc(LEN); /*開辟一個(gè)新單元開辟一個(gè)新單元*/ scanf(“%ld,%f,&p1num,&p1score); p1next=NULL; head=NULL; num score nextp1 num9910189.5NULLwhile(p1num!=0)if(n= =0) head=p1; else p2next=p1; p2=p1; n=n+1; p1=(struct stude

28、nt *) malloc(LEN); scanf(“%ld,%f”,&p1num,&p1score); p1next=NULL;return(head); main( ) struct student *head; head=creat( );9910189.5NULLheadp2p1num scorenextp1p2num scorenextp19910290NULL00NULL輸出鏈表基本思路:基本思路:首先要知道已有的鏈表的頭指針首先要知道已有的鏈表的頭指針head的值的值設(shè)一個(gè)指針變量設(shè)一個(gè)指針變量p, 使使p=head,即讓它指向第一個(gè),即讓它指向第一個(gè)結(jié)點(diǎn)結(jié)點(diǎn)輸出輸

29、出p所指向的結(jié)點(diǎn)的數(shù)據(jù)所指向的結(jié)點(diǎn)的數(shù)據(jù)使使p后移一結(jié)點(diǎn),即后移一結(jié)點(diǎn),即p=p-next,則,則p指向第二個(gè)結(jié)指向第二個(gè)結(jié)點(diǎn)點(diǎn)然后再輸出,如此循環(huán)直到鏈表的尾結(jié)點(diǎn)然后再輸出,如此循環(huán)直到鏈表的尾結(jié)點(diǎn)注意:注意:head的值由實(shí)參傳過來,也就是將已有的鏈表的值由實(shí)參傳過來,也就是將已有的鏈表 的頭指針傳給被調(diào)用的函數(shù)的頭指針傳給被調(diào)用的函數(shù)void print(struct student *head) struct student *p; p=head; while(p!=NULL) printf(“%ld%5.1fn”,pnum,pscore); p=pnext; /* 輸出鏈表函數(shù)輸出鏈

30、表函數(shù)print */&構(gòu)造數(shù)據(jù)類型構(gòu)造數(shù)據(jù)類型,也叫聯(lián)合體也叫聯(lián)合體&用途:使幾個(gè)不同類型的變量共占一段內(nèi)存用途:使幾個(gè)不同類型的變量共占一段內(nèi)存(相互覆蓋相互覆蓋)n共用體類型定義共用體類型定義定義形式:定義形式:union 共用體名共用體名 類型標(biāo)識(shí)符類型標(biāo)識(shí)符1 成員名成員名1; 類型標(biāo)識(shí)符類型標(biāo)識(shí)符2 成員名成員名2; .;例例 union data int i; char ch; float f; ;fchi9.5 共用體共用體形式二: union data int i; char ch; float f; a,b,c, *p,d3;形式一: union data

31、int i; char ch; float f; ; union data a,b,c,*p,d3;形式三: union int i; char ch; float f; a,b,c *p,d3;共用體變量定義分配內(nèi)存,長(zhǎng)度=最長(zhǎng)成員所占字節(jié)數(shù)共用體變量的定義引用方式:引用方式:共用體指針名共用體指針名-成員名成員名共用體變量名共用體變量名.成員名成員名(*共用體指針名共用體指針名).成員名成員名union data int i; char ch; float f; ; union data a,*p,d3;a.i a.ch a.fp=&a; p-i p-ch p-fp=&a;

32、 (*p).i (*p).ch (*p).fd0.i d0.ch d0.f共用體變量引用共用體變量引用例例 a.i=1; a.ch=a; a.f=1.5; printf(“%d”,a.i); ( 編譯通過,運(yùn)行結(jié)果不對(duì)編譯通過,運(yùn)行結(jié)果不對(duì)) 不能引用共用體變量,只能不能引用共用體變量,只能引用其成員引用其成員,不能不能在定義共在定義共用體變量時(shí)用體變量時(shí)初始化初始化例例 union int i; char ch; float f; a; a=1; ( ) 例例 union int i; char ch; float f; a=1,a,1.5; ( ) 共用體變量引用共用體變量引用共用體變量中

33、起作用的成員是共用體變量中起作用的成員是最后一次存放的成員最后一次存放的成員引用規(guī)則引用規(guī)則區(qū)別區(qū)別: 存儲(chǔ)方式不同存儲(chǔ)方式不同struct node char ch2; int k;a;union node char ch2; int k;b;achkbch k變量的各成員同時(shí)存在變量的各成員同時(shí)存在任一時(shí)刻只有一個(gè)成員存在任一時(shí)刻只有一個(gè)成員存在結(jié)構(gòu)體與共用體結(jié)構(gòu)體與共用體num namesexjobclassposition1011 Li2086 WangFMST501profstruct people int num; char name10; char sex; char job;

34、union int class; char position10; category;例 結(jié)構(gòu)體中嵌套共用體結(jié)構(gòu)體和共用體兩者可相互嵌套一般形式為:一般形式為:enum 枚舉類型名枚舉類型名取值取值1,取值,取值2,取值,取值n;例如:例如:enum daySun,Mon,Tue,Wed,Thu,Fri,Sat; C在編譯時(shí)按順序分配給它們的值為在編譯時(shí)按順序分配給它們的值為0、1、2、3、4n。枚舉元素的值在定義時(shí)也可以由程序指定,如:枚舉元素的值在定義時(shí)也可以由程序指定,如:enum day Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat;定義定義Sun為為7, Mon為為1,后面的值順序加,后面的值順序加1,Sat就為就為6。 9.6 9.6 枚舉類型枚舉類型n枚舉類型的定義枚舉類型的定義枚舉變量定義形式如下:枚舉變量定義形式如下: enum 枚舉類型名枚舉類型名 枚舉變量名;枚舉變量名; 如如 enum day a,b ;或或 enum day Sun,Mon,Tue,Wed,Thu,Fri,Sat a,b; 或或 enum Sun,Mon,Tue,Wed,Thu,Fri,Sat a,b; n枚舉變量的定義枚舉變

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論