版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C語(yǔ)言程序設(shè)計(jì),第10章 結(jié)構(gòu)體、共同體與枚舉類型,問題:實(shí)際應(yīng)用中,通常會(huì)將相關(guān)的不同類型的數(shù)據(jù)項(xiàng)組成一個(gè)有機(jī)的整體,這些數(shù)據(jù)項(xiàng)在計(jì)算機(jī)中如何表示?,學(xué)生登錄信息 學(xué)生成績(jī)表,這些數(shù)據(jù)的特點(diǎn)是: 1、有多項(xiàng)不同類型數(shù)據(jù)組成 2、各項(xiàng)數(shù)據(jù)占用空間大小有可能不同 C語(yǔ)言為了表示這種數(shù)據(jù),定義了一種數(shù)據(jù)結(jié)構(gòu):結(jié)構(gòu)體。,引子,第10章 結(jié)構(gòu)體、共同體與枚舉類型,本章難點(diǎn),結(jié)構(gòu)體類型及變量 結(jié)構(gòu)體數(shù)組的使用 指針和結(jié)構(gòu)體 共用體、枚舉、用戶自定義類型,結(jié)構(gòu)體指針變量的引用 鏈表的建立、插入、刪除、輸出等操作 共用體類型的數(shù)據(jù)特點(diǎn),本章要點(diǎn),10.1,10.2,10.3,10.4,10.5,結(jié)構(gòu)體變量的
2、定義,結(jié)構(gòu)體變量的引用和初始化,結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體指針變量,結(jié)構(gòu)體與函數(shù),本章主要內(nèi)容,10.6,10.7,10.8,10.9,10.10,位段結(jié)構(gòu)體,鏈表,共同體,枚舉類型,用typedef定義類型,本章主要內(nèi)容,結(jié)構(gòu)體類型定義 結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型 一個(gè)“結(jié)構(gòu)體”類型由若干“成員”組成,每一個(gè)成員可以是一個(gè)基本數(shù)據(jù)類型或者是一個(gè)結(jié)構(gòu)體類型。 結(jié)構(gòu)體類型定義,struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; . ;,成員類型可以是 基本型或構(gòu)造型,struct是關(guān)鍵字, 不能省略,合法標(biāo)識(shí)符 可省:無名結(jié)構(gòu)體,10.1 結(jié)構(gòu)體變量的定義,定義義結(jié)構(gòu)體類型時(shí),應(yīng)注意 成員
3、類型可以是除本身結(jié)構(gòu)體類型之外的任何已有類型,也可以是任何已有類型(包括本身類型在內(nèi))的指針類型,即構(gòu)成嵌套的結(jié)構(gòu)。 當(dāng)一個(gè)結(jié)構(gòu)體類型定義在函數(shù)之外時(shí),它具有全局作用域;若定義在任一對(duì)花括號(hào)之內(nèi),則具有局部作用域,其作用范圍是所在花括號(hào)構(gòu)成的塊。 結(jié)構(gòu)體是一種復(fù)雜的數(shù)據(jù)類型,是數(shù)目固定、類型不同的若干成員的集合,結(jié)構(gòu)體類型的定義只是列出了該結(jié)構(gòu)的組成情況,編譯系統(tǒng)并未因此而分配存儲(chǔ)空間,當(dāng)定義了結(jié)構(gòu)體類型的變量或數(shù)組后,編譯系統(tǒng)才會(huì)分配存儲(chǔ)空間。 成員名可以與程序中的變量名相同,二者不代表同一個(gè)對(duì)象。 如果兩個(gè)結(jié)構(gòu)體的成員類型、名稱、個(gè)數(shù)相同,但結(jié)構(gòu)體名不同,也是兩個(gè)不同的結(jié)構(gòu)類型。,例如,可
4、將日期定義為一個(gè)結(jié)構(gòu)體: struct date int month; int day; int year; ;,結(jié)構(gòu)體變量的定義 先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量 先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量 例如 在定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量 例如 直接定義結(jié)構(gòu)體變量 例如,struct stu int num; char name20; char sex; int age; float score; struct date birthday; ; struct stu boy1,boy2;,struct stu int num; char name20; char sex; int ag
5、e; float score; struct date birthday; boy1,boy2;,struct int num; char name20; char sex; int age; float score; struct date birthday; boy1,boy2;,本章主要內(nèi)容,10.1,10.2,10.3,10.4,10.5,結(jié)構(gòu)體變量的定義,結(jié)構(gòu)體變量的引用和初始化,結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體指針變量,結(jié)構(gòu)體與函數(shù),結(jié)構(gòu)體變量的引用 引用方式: 結(jié)構(gòu)體變量名.成員名 其中點(diǎn)號(hào)“.”稱為成員運(yùn)算符,它在所有的運(yùn)算符中優(yōu)先級(jí)最高。 引用結(jié)構(gòu)體變量時(shí),應(yīng)注意以下幾點(diǎn) 不能將一個(gè)結(jié)構(gòu)體
6、變量作為一個(gè)整體進(jìn)行輸入輸出 如果成員本身又是一個(gè)結(jié)構(gòu)體類型,則要用若干個(gè)成員運(yùn)算符逐級(jí)找到最低一級(jí)的成員才能引用 對(duì)成員變量可以像普通變量一樣進(jìn)行各種運(yùn)算 可以引用結(jié)構(gòu)體變量成員的地址,也可以引用結(jié)構(gòu)體變量的地址,10.2 結(jié)構(gòu)體變量的引用和初始化,例如,對(duì)前面定義的結(jié)構(gòu)變量boy1和boy2,其成員的引用形式如下。 boy1.num /* 第一個(gè)人的學(xué)號(hào) */ boy2.sex /* 第二個(gè)人的性別 */,結(jié)構(gòu)體變量的初始化 本例中,對(duì)結(jié)構(gòu)體變量boy1作了初始化賦值,然后把boy1的值整體賦予boy2,最后用printf函數(shù)輸出boy2各成員的值。,例對(duì)結(jié)構(gòu)變量初始化。 #include
7、 main() struct stu int num; char name20; char sex; int age; float score; boy2,boy1=102,Zhang ping,M,20,78.5; boy2=boy1; printf(Number:%dnName:%sn,boy2.num,); printf(Sex:%cnage:%dScore:%4.1fn,boy2.sex,boy2.age,boy2.score); ,運(yùn)行結(jié)果: Number:102 Name:Zhang ping Sex:M Age:20 Score:78.5,本章主要內(nèi)容,10.1
8、,10.2,10.3,10.4,10.5,結(jié)構(gòu)體變量的定義,結(jié)構(gòu)體變量的引用和初始化,結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體指針變量,結(jié)構(gòu)體與函數(shù),結(jié)構(gòu)體數(shù)組的定義 結(jié)構(gòu)體數(shù)組的每一個(gè)元素都具有相同的結(jié)構(gòu)體類型 三種形式:,形式一: 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
9、 age; stu2;,10.3 結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體數(shù)組初始化 一個(gè)結(jié)構(gòu)體數(shù)組的元素相當(dāng)于一個(gè)結(jié)構(gòu)體變量,引用結(jié)構(gòu)體數(shù)組元素的一般形式為 結(jié)構(gòu)體數(shù)組名下標(biāo).成員名 例如,#include struct stu int num; char name20; 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;
10、i5;i+) s+=boyi.score; if(boyi.score60) c+=1; ave=s/5; printf(average=%fncount=%dn,ave,c); ,運(yùn)行結(jié)果: average=69.000000 count=2,本章主要內(nèi)容,10.1,10.2,10.3,10.4,10.5,結(jié)構(gòu)體變量的定義,結(jié)構(gòu)體變量的引用和初始化,結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體指針變量,結(jié)構(gòu)體與函數(shù),指向結(jié)構(gòu)體變量的指針 定義形式:struct 結(jié)構(gòu)體名 *結(jié)構(gòu)體指針名; 例如struct stu boy,*pstu; 定義了結(jié)構(gòu)體變量boy和結(jié)構(gòu)體指針變量pstu,通過賦值語(yǔ)句可使pstu指向boy
11、, 構(gòu)體指針可以訪問結(jié)構(gòu)體變量的各個(gè)成員,一般形式為 結(jié)構(gòu)體指針變量-成員名 運(yùn)算符“-”的優(yōu)先級(jí)比較高,高于算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符 例如 +pstu-num 等價(jià)于 +(pstu-num) 結(jié)構(gòu)體指針訪問結(jié)構(gòu)體變量的形式也可以表示為 (*結(jié)構(gòu)體指針變量).成員名 例如 (*pstu).num 應(yīng)該注意(*pstu)兩側(cè)的括號(hào)不可少,因?yàn)槌蓡T符“.”的優(yōu)先級(jí)高于“*”,10.4 結(jié)構(gòu)體指針變量,存放結(jié)構(gòu)體變量在內(nèi)存的起始地址,以下三種形式是等價(jià) 結(jié)構(gòu)體變量名.成員名 (*結(jié)構(gòu)體指針變量).成員名 結(jié)構(gòu)體指針變量-成員名,結(jié)構(gòu)指針變量的引用 #include struct stu i
12、nt num; char name20; char sex; float score; boy=102,Zhang ping,M,78.5,*pstu; main() pstu= ,運(yùn)行結(jié)果: Number=102 Name= Zhang ping Sex=M Score=78.500000 Number=102 Name= Zhang ping Sex=M Score=78.500000 Number=102 Name= Zhang ping Sex=M Score=78.500000,指向結(jié)構(gòu)體數(shù)組的指針 普通數(shù)組可以通過指針變量來訪問,同樣,也可以通過結(jié)構(gòu)體指針訪問結(jié)構(gòu)體數(shù)組。 例如 p
13、stu=boy;或pstu= pstu就指向了該結(jié)構(gòu)體數(shù)組的首地址(即第一個(gè)元素boy0的地址)。結(jié)構(gòu)體指針pstu加1則指向下一個(gè)元素,用指針變量輸出結(jié)構(gòu)體數(shù)組。 #include struct stu int num; char name20; char sex; float score; boy5= 101,Zhou ping,M,45, 102,Zhang ping,M,62.5, 103,Liu fang,F,92.5, 104,Cheng ling,F,87, 105,Wang ming,M,58 ; main() struct stu *ps; printf(NotNamettt
14、SextScoretn); for(ps=boy;psnum,ps-name,ps-sex,ps-score); ,運(yùn)行結(jié)果: No Name Sex Score 101 Zhou ping M 45.0 102 Zhang ping M 62.5 103 Liu fang F 92.5 104 Cheng ling F 87.0 105 Wang ming M 58.0,本章主要內(nèi)容,10.1,10.2,10.3,10.4,10.5,結(jié)構(gòu)體變量的定義,結(jié)構(gòu)體變量的引用和初始化,結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體指針變量,結(jié)構(gòu)體與函數(shù),結(jié)構(gòu)體變量作為函數(shù)參數(shù) 結(jié)構(gòu)體變量的成員可作為函數(shù)的實(shí)參,用法和普通變量作
15、實(shí)參一樣 例如,10.5 結(jié)構(gòu)體與函數(shù),顯示學(xué)生的基本信息,利用結(jié)構(gòu)體變量作為函數(shù)參數(shù)編程。 #include #include struct stu int num; char name20; char sex; float score; ; main() void list(struct stu student); struct stu student; student.num=101; strcpy(, Zhou ping); student.sex=M; student.score=45; list(student); void list(struct stu
16、student) printf(Number=%dtName=%sn,student.num,); printf(Sex=%cttScore=%fn,student.sex,student.score); ,運(yùn)行結(jié)果: Number=101 Name=Zhou ping Sex=M Score=45.000000,返回結(jié)構(gòu)體類型數(shù)據(jù)的函數(shù) 函數(shù)的返回值可以是整型、實(shí)型或指針類型等 例如,顯示學(xué)生的基本信息,利用結(jié)構(gòu)體變量作為函數(shù)參數(shù)編程。輸入數(shù)據(jù)部分用函數(shù)實(shí)現(xiàn) #include struct stu int num; char name20; char sex; flo
17、at score; student; main() void list(struct stu student); struct stu newstudent(); student=newstudent(); list(student); void list(struct stu student) printf(Number=%dtName=%sn,student.num,); printf(Sex=%cttScore=%fn,student.sex,student.score); struct stu newstudent() struct stu newstu; sc
18、anf(%d, ,運(yùn)行結(jié)果: 101Li ping M 76 Number=101 Name=Li ping Sex=M Score=76.000000,結(jié)構(gòu)體指針作為函數(shù)參數(shù) 結(jié)構(gòu)體指針作為函數(shù)的參數(shù)時(shí),傳遞的只是地址,從而減少結(jié)構(gòu)變量作參數(shù)時(shí)引起的空間和時(shí)間上的開銷 例如,顯示學(xué)生的基本信息,利用結(jié)構(gòu)體指針變量作為函數(shù)參數(shù)編程。 #include struct stu int num; char name20; char sex; float score; ; main() void list(struct stu *student); struct stu student; studen
19、t.num=101; strcpy(, Zhou ping); student.sex=M; student.score=45; list( ,運(yùn)行結(jié)果: Number=101 Name=Zhou ping Sex=M Score=45.000000,本章主要內(nèi)容,10.6,10.7,10.8,10.9,10.10,位段結(jié)構(gòu)體,鏈表,共同體,枚舉類型,用typedef定義類型,位段結(jié)構(gòu)體類型和位段結(jié)構(gòu)體變量 C語(yǔ)言允許在一個(gè)結(jié)構(gòu)體中以位為單位來指定其成員所占內(nèi)存長(zhǎng)度,這種以位為單位的成員稱為“位段”或稱“位域” 定義 例如 位段結(jié)構(gòu)體變量的定義與結(jié)構(gòu)體變量定義方式相同
20、位域的引用 一般形式為:位段結(jié)構(gòu)體變量.位域名 例如,10.6 位段結(jié)構(gòu)體,struct 位段結(jié)構(gòu)體名 類型標(biāo)識(shí)符 位域1:位域長(zhǎng)度; 類型標(biāo)識(shí)符 位域2:位域長(zhǎng)度; . . . 類型標(biāo)識(shí)符 位域n:位域長(zhǎng)度; ,struct bs int a:8; int b:2; int c:6; data;,位域的引用 #include main() struct bs unsigned a:1; unsigned b:3; unsigned c:4; bit,*pbit; bit.a=1; bit.b=7; bit.c=15; printf(%d,%d,%dn,bit.a,bit.b,bit.c);
21、pbit= ,運(yùn)行結(jié)果: 1,7,15 0,3,15,本章主要內(nèi)容,10.6,10.7,10.8,10.9,10.10,位段結(jié)構(gòu)體,鏈表,共同體,枚舉類型,用typedef定義類型,鏈表概述 概述,是一種數(shù)據(jù)結(jié)構(gòu),可以動(dòng)態(tài)分配內(nèi)存,鏈表由結(jié)點(diǎn)組成,每個(gè)結(jié)點(diǎn)有數(shù)據(jù)域和指針域兩個(gè)域。 “頭指針”指向第一個(gè)元素結(jié)點(diǎn),指針域指向下一結(jié)點(diǎn)。 結(jié)構(gòu)定義,如 形式如右圖所示 例如,10.7 鏈表,struct stu int num; char name20; struct stu * next; ,struct stu int num; char name20; struct stu *next; ;,動(dòng)
22、態(tài)內(nèi)存管理 內(nèi)存空間分配函數(shù)malloc 原型 void * malloc(unsigned int size) 例 float * pc; pc=(float*)malloc(5*sizeof(float); 內(nèi)存空間函數(shù)calloc 原型 void * calloc(unsigned n, unsigned size); 例 pc=(float *)calloc(8,sizeof(float); 釋放內(nèi)存空間函數(shù)free 原型 void free(void * p); 例如,動(dòng)態(tài)數(shù)組的建立和使用。 #include #include main() float *pf; int i,n; s
23、canf(%d,/*調(diào)用free函數(shù)時(shí),會(huì)自動(dòng)將指針pf的類型轉(zhuǎn)換為void指針類型 */ ,運(yùn)行結(jié)果: 5 1.100000 2.200000 3.300000 4.400000 5.500000,創(chuàng)建鏈表 讀取數(shù)據(jù); 生成新結(jié)點(diǎn); 將數(shù)據(jù)存入新結(jié)點(diǎn); 將新結(jié)點(diǎn)插入到鏈表中。 例如:從鍵盤讀入學(xué)生的信息,包括學(xué)號(hào)、成績(jī),當(dāng)輸入的學(xué)號(hào)為0時(shí),表示建立鏈表結(jié)束。 流程圖如圖,#include #include #define LEN sizeof(struct stu)/*LEN為結(jié)構(gòu)體類型struct stu的長(zhǎng)度*/ struct stu int num; float score; stru
24、ct stu *next; ; struct stu *creat() struct stu *head;/* 用于指向鏈表的第一個(gè)結(jié)點(diǎn),即頭指針 */ struct stu *p; /* 用于指向新生成的結(jié)點(diǎn) */ struct stu *tail;/* 用于指向鏈表的最后一個(gè)結(jié)點(diǎn) */ int x; tail=head=NULL; scanf(%d, ,順序訪問鏈表中的結(jié)點(diǎn) 所謂“訪問”就是對(duì)各結(jié)點(diǎn)的數(shù)據(jù)域中的值進(jìn)行修改、運(yùn)算、輸出等 例如:編寫函數(shù),順序輸出鏈表中各結(jié)點(diǎn)數(shù)據(jù)域中的內(nèi)容。順序輸出鏈表的算法比較簡(jiǎn)單,只需利用一個(gè)工作指針(p)從頭到尾依次指向鏈表中的每個(gè)結(jié)點(diǎn),當(dāng)指針指向某個(gè)結(jié)
25、點(diǎn)時(shí),就輸出該節(jié)點(diǎn)數(shù)據(jù)域中的內(nèi)容,直到遇到鏈表結(jié)束標(biāo)志為止。如果鏈表為空,就輸出提示信息。,void list(struct stu *head) struct stu *p; p=head; if(head!=NULL) printf(The list records are:n); do printf(%dt%5.1fn,p-num,p-score); p=p-next; /* p指針后移 */ while(p!=NULL); else printf(The list is null); main() struct stu *head; head=creat(); list(head);
26、,運(yùn)行結(jié)果: 101 90 102 89 0 The list records are: 101 90.0 102 89.0,在鏈表中插入結(jié)點(diǎn) 指將一個(gè)結(jié)點(diǎn)插入到一個(gè)已有鏈表中,因此,創(chuàng)建鏈表的過程,也可以理解為將一個(gè)個(gè)結(jié)點(diǎn)插入到空鏈表中。 算法過程 輸入數(shù)據(jù) 生成新結(jié)點(diǎn) 將數(shù)據(jù)存入新結(jié)點(diǎn) 在鏈表中尋找第一個(gè)大于新結(jié)點(diǎn)學(xué)號(hào)的結(jié)點(diǎn) 如果鏈表為空,直接插入新結(jié)點(diǎn),即新結(jié)點(diǎn)為鏈表的唯一的結(jié)點(diǎn) 查找成功,該結(jié)點(diǎn)為鏈表的第一個(gè)結(jié)點(diǎn),將鏈表的頭指針指向新結(jié)點(diǎn),新結(jié)點(diǎn)的next域指向原來鏈表的第一個(gè)結(jié)點(diǎn),即插到表頭之前 查找成功,該結(jié)點(diǎn)不是鏈表的第一個(gè)結(jié)點(diǎn),將新結(jié)點(diǎn)插入到該結(jié)點(diǎn)之前,即插到表的中間 查找不成
27、功,插入到鏈表末尾的后面 例如:編寫函數(shù),將一個(gè)結(jié)點(diǎn)插入到一個(gè)已有學(xué)生鏈表中,設(shè)已有鏈表按學(xué)號(hào)由小到大順序排列。 程序運(yùn)行過程,struct stu * insert(struct stu *head,struct stu *stud) struct stu *p0; /* p0指向要插入的新結(jié)點(diǎn) */ struct stu *p1; /* p1指向鏈表中第一個(gè)學(xué)號(hào)大于新結(jié)點(diǎn)的學(xué)號(hào)的結(jié)點(diǎn) */ struct stu *p2; /*p2指向p1的前驅(qū)結(jié)點(diǎn),即p2的next域指向p1 */ p0=stud; p1=head; if(head=NULL) /* 情況,原來的鏈表為空表 */ head
28、=p0; p0-next=NULL; else while(p1!=NULL) ,運(yùn)行結(jié)果: 102 95 100 94 101 93 103 99 0 The list records are: 100 94.0 101 93.0 102 95.0 103 99.0,在鏈表中刪除結(jié)點(diǎn) 過程 從p1指向的第一個(gè)結(jié)點(diǎn)開始,檢查其數(shù)據(jù)是否等于給定的關(guān)鍵字(如學(xué)號(hào)),如果相等就將該結(jié)點(diǎn)刪除,否則p1后移一個(gè)結(jié)點(diǎn),再如此進(jìn)行下去,直到遇到表尾為止。 如果刪除的是第一個(gè)結(jié)點(diǎn)(由p1指向),例如,刪除學(xué)號(hào)為100的學(xué)生結(jié)點(diǎn),頭指針指向第二個(gè)結(jié)點(diǎn),操作為:head=p1-next,如圖10-6所示 如果要?jiǎng)h
29、除的不是第一個(gè)結(jié)點(diǎn),例如,刪除學(xué)號(hào)為102的學(xué)生結(jié)點(diǎn),即讓學(xué)號(hào)為101的學(xué)生結(jié)點(diǎn)(由p2指向)的next指針域指向?qū)W號(hào)為103的學(xué)生結(jié)點(diǎn),操作為:p2-next=p1-next,如圖10-7所示 例如:編寫鏈表刪除函數(shù),根據(jù)輸入的學(xué)號(hào)刪除學(xué)生結(jié)點(diǎn)。,struct stu *del(struct stu *head,int num) struct stu *p1; /*p1指向要?jiǎng)h除的結(jié)點(diǎn)*/ struct stu *p2; /*p2指向要?jiǎng)h除的結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)*/ if(head=NULL) /*空鏈表*/ printf(The list is NULLn); else p1=head; whi
30、le(p1!=NULL /*輸出鏈表*/ ,運(yùn)行結(jié)果: 02 95 100 94 101 93 103 99 0 The list records are: 100 94.0 101 93.0 102 95.0 103 99.0 please input the number for deletion:102 delete:102 The list records are: 100 94.0 101 93.0 103 99.0,本章主要內(nèi)容,10.6,10.7,10.8,10.9,10.10,位段結(jié)構(gòu)體,鏈表,共同體,枚舉類型,用typedef定義類型,共用體類型及其變量的定義 共用體變量中的
31、所有成員占用同一段內(nèi)存空間,共用體又稱為“聯(lián)合體” 共用體類型定義 例如,union 共用體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; . ;,例 union data int i; char ch; float f; ;,類型定義不分配內(nèi)存,10.8 共同體,先定義共用體類型后定義共用體變量 union data int i; char s6; float f; ; union data a,b,c;,同時(shí)定義共用體類型和變量 union data int i; char s6; float f; a,b,c;,直接定義共用體變量 union int i; char s6; float
32、f; a,b,c;,共用體變量的定義有三種方式,共用體變量的引用 引用共用體變量成員方式有如下三種 例如 例如,共用體變量名.成員名= 共用體指針變量名-成員名= (*共用體指針變量名).成員名,程序示例 #include #include main() union char a4; struct bt char c1; char c2; char c3; char c4; chs; d; strcpy(d.a,deab); printf(%c,%cn,d.chs.c2, d.chs.c3); ,共用體變量的地址和它的各個(gè)成員的地址相同 d的成員a和chs的首地址相同,即a0、a1、a2和a3
33、的地址依次與c1、c2、c3和c4相同 運(yùn)行結(jié)果: e,a,程序示例 main() union char a; int b; long c; uu; uu.c=0 x12345678; printf(n1:a=%x,b=%x,c=%lx,uu.a,uu.b,uu.c); uu.a=0 x61; printf(n2:a=%x,b=%x,c=%lx,uu.a,uu.b,uu.c); uu.b=0 x1234; printf(n3:a=%x,b=%x,c=%lx,uu.a,uu.b,uu.c); ,1:a=78,b=12345678,c=12345678 2:a=61,b=12345661,c=12
34、345661 3:a=34,b=1234,c=1234,本章主要內(nèi)容,10.6,10.7,10.8,10.9,10.10,位段結(jié)構(gòu)體,鏈表,共同體,枚舉類型,用typedef定義類型,枚舉類型及變量 枚舉類型是一個(gè)采用標(biāo)識(shí)符表示的整型常數(shù)的集合,其定義類似于結(jié)構(gòu)體類型。 定義 一般形式為 enum 枚舉名 枚舉常量1,枚舉常量2,枚舉常量n ; 其中,enum為關(guān)鍵字,表示枚舉;枚舉名是用戶定義的標(biāo)識(shí)符;枚舉常量是用戶定義的有意義的標(biāo)識(shí)符。 例如: enum weekdaySun,Mon,Tue,Wed,Thu,Fri,Sat,10.9 枚舉類型,枚舉變量的定義 先定義枚舉類型再定義枚舉變量
35、enum weekdaySun,Mon,Tue,Wed,Thu,Fri,Sat; enum weekday a,b,c; 直接定義枚舉變量 enum weekdaySun,Mon,Tue,Wed,Thu,Fri,Sata,b,c; 同時(shí)定義枚舉類型和枚舉變量 enum Sun,Mon,Tue,Wed,Thu,Fri,Sata,b,c;,枚舉變量的賦值和使用 只能取其相應(yīng)枚舉類型所列出的枚舉常量 例如: enum Sun,Mon,Tue,Wed,Thu,Fri,Sata,b,c; a=Sun; /*正確*/ a=Sunday /*錯(cuò)誤*/ 例如 注意: 能使用賦值語(yǔ)句對(duì)枚舉常量標(biāo)識(shí)符賦值 只能把枚舉常量值賦予枚舉變量,不能把枚舉常量所對(duì)應(yīng)的序號(hào)直接賦予枚舉變量 枚舉常量不是字符常量也不是字符串常量,使用時(shí)不要加單、雙引號(hào) 枚舉常量可以進(jìn)行比較運(yùn)算,由它們對(duì)應(yīng)的整數(shù)參加
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度創(chuàng)業(yè)培訓(xùn)學(xué)習(xí)協(xié)議
- 二零二五版污泥運(yùn)輸與污泥處理項(xiàng)目環(huán)境風(fēng)險(xiǎn)評(píng)估合同范本3篇
- 2025版職業(yè)培訓(xùn)機(jī)構(gòu)教師聘用合同3篇
- 河道預(yù)應(yīng)力管樁施工方案
- 鐵路聲屏障施工方案
- 二零二五年度個(gè)人教育貸款擔(dān)保合同范例4篇
- 通信傳輸施工方案
- 二零二五年度車輛押證不押車借款合同示范文本3篇
- 2025版電子產(chǎn)品售后回租業(yè)務(wù)合作協(xié)議書(全新)2篇
- 二零二五年度個(gè)人快遞業(yè)務(wù)承包合同范本6篇
- 《個(gè)體防護(hù)裝備安全管理規(guī)范AQ 6111-2023》知識(shí)培訓(xùn)
- 商品退換貨申請(qǐng)表模板
- 實(shí)習(xí)單位鑒定表(模板)
- 六西格瑪(6Sigma)詳解及實(shí)際案例分析
- 機(jī)械制造技術(shù)-成都工業(yè)學(xué)院中國(guó)大學(xué)mooc課后章節(jié)答案期末考試題庫(kù)2023年
- 數(shù)字媒體應(yīng)用技術(shù)專業(yè)調(diào)研方案
- 2023年常州市新課結(jié)束考試九年級(jí)數(shù)學(xué)試卷(含答案)
- 正常分娩 分娩機(jī)制 助產(chǎn)學(xué)課件
- 廣東縣級(jí)農(nóng)商銀行聯(lián)社高管候選人公開競(jìng)聘筆試有關(guān)事項(xiàng)上岸提分題庫(kù)3套【500題帶答案含詳解】
- 中國(guó)成人住院患者高血糖管理目標(biāo)專家共識(shí)課件
- 射頻技術(shù)在疼痛的應(yīng)用課件
評(píng)論
0/150
提交評(píng)論