版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、南京航空航天大學(xué)信息學(xué)院計(jì)算機(jī)基礎(chǔ)教研室 制作(版權(quán)所有) 第10章 結(jié)構(gòu)體、共用體和枚舉類型 第10章 本章要點(diǎn) v了解結(jié)構(gòu)了解結(jié)構(gòu) v了解關(guān)于結(jié)構(gòu)的各種操作了解關(guān)于結(jié)構(gòu)的各種操作 v理解怎樣使用結(jié)構(gòu)操作數(shù)據(jù)理解怎樣使用結(jié)構(gòu)操作數(shù)據(jù) v理解結(jié)構(gòu)和函數(shù)之間的關(guān)系、掌握結(jié)構(gòu)作理解結(jié)構(gòu)和函數(shù)之間的關(guān)系、掌握結(jié)構(gòu)作 為參數(shù)傳遞與返回結(jié)構(gòu)的函數(shù)方法為參數(shù)傳遞與返回結(jié)構(gòu)的函數(shù)方法 v理解結(jié)構(gòu)中數(shù)組的用法理解結(jié)構(gòu)中數(shù)組的用法 v理解怎樣創(chuàng)建結(jié)構(gòu)數(shù)組理解怎樣創(chuàng)建結(jié)構(gòu)數(shù)組 v了解共用體的特點(diǎn)了解共用體的特點(diǎn) v了解枚舉類型了解枚舉類型 第10章 問(wèn)題的提出 學(xué)號(hào)學(xué)號(hào) 姓名姓名 年齡年齡 性別性別 成績(jī)成績(jī)1
2、成績(jī)成績(jī)2 平均成績(jī)平均成績(jī) 1 aa 19 m 80 90 90 2 bb 18 f 78 70 73 3 cc 17 m 81 75 79 4 dd 18 f 80 60 75 5 ee 19 m 76 83 83 每行的數(shù)據(jù)類型不相同,如何表示此二維數(shù)據(jù)?每行的數(shù)據(jù)類型不相同,如何表示此二維數(shù)據(jù)? 如何交換兩行值?如何交換兩行值? 能否將一行看成一個(gè)整體?能否將一行看成一個(gè)整體? 定義一種類型定義一種類型,把不同的數(shù)據(jù)作為一個(gè)整體來(lái)處理,把不同的數(shù)據(jù)作為一個(gè)整體來(lái)處理結(jié)構(gòu)體結(jié)構(gòu)體 第10章 數(shù)據(jù)類型 數(shù)組數(shù)組 - 有相同類型的數(shù)據(jù)集合有相同類型的數(shù)據(jù)集合 結(jié)構(gòu)體結(jié)構(gòu)體- 不同類型的數(shù)據(jù)集
3、合不同類型的數(shù)據(jù)集合 構(gòu)造數(shù)據(jù)類型構(gòu)造數(shù)據(jù)類型: 由簡(jiǎn)單數(shù)據(jù)類型(由簡(jiǎn)單數(shù)據(jù)類型(int、float、 char)組合而組合而 成的(有機(jī)整體)數(shù)據(jù)類型。成的(有機(jī)整體)數(shù)據(jù)類型。 基本類型基本類型 : 整型整型 、實(shí)型、實(shí)型 、字符型、字符型. 第10章 主要內(nèi)容 v結(jié)構(gòu)體類型的定義結(jié)構(gòu)體類型的定義 v結(jié)構(gòu)體類型的變量和結(jié)構(gòu)體類型的變量和結(jié)構(gòu)體類型結(jié)構(gòu)體類型數(shù)組數(shù)組 v共用共用體體 v枚舉類型枚舉類型 第10章 結(jié)構(gòu)體類型的定義 定義了一種新的數(shù)據(jù)類型定義了一種新的數(shù)據(jù)類型 struct 結(jié)構(gòu)體名或結(jié)構(gòu)體名結(jié)構(gòu)體名或結(jié)構(gòu)體名 struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名成員名
4、1 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名成員名2 . 類型標(biāo)識(shí)符類型標(biāo)識(shí)符 成員名成員名n ; 可為簡(jiǎn)單類型可為簡(jiǎn)單類型 也可為構(gòu)造類型也可為構(gòu)造類型 關(guān)鍵字關(guān)鍵字 不能少不能少 成員 列表 第10章 例 v以學(xué)生檔案為例,假設(shè)包括如下數(shù)據(jù)項(xiàng)以學(xué)生檔案為例,假設(shè)包括如下數(shù)據(jù)項(xiàng) 學(xué)號(hào)(學(xué)號(hào)(num):):整型整型 姓名(姓名(name):):字符串字符串 性別(性別(sex):):字符型字符型 出生日期(出生日期(birthday):):date結(jié)構(gòu)體結(jié)構(gòu)體 四門課成績(jī)(四門課成績(jī)(sc):):一維實(shí)型數(shù)組一維實(shí)型數(shù)組 第10章 例 依此格式定義上例依此格式定義上例 struct date int ye
5、ar ,month ,day; struct student int num; char name12; char sex; date birthday; float sc4; ; 如如struct date 沒(méi)事先說(shuō)明可沒(méi)事先說(shuō)明可 寫成:寫成: struct student int num ; char name12; char sex; struct int year; int month; int day; birthday; float sc4; ; 第10章 例 例例1 1:一組相關(guān)變量:一組相關(guān)變量 定義結(jié)構(gòu)體類型定義結(jié)構(gòu)體類型 新數(shù)據(jù)類型新數(shù)據(jù)類型 結(jié)構(gòu)體成員結(jié)構(gòu)體成員 int
6、 month ; int day ; int year ; struct date int year ; int month ; int day ; ; char name30; struct wage float salary ; char name30; float salary ; ;不同數(shù)據(jù)類型的成員不同數(shù)據(jù)類型的成員 例例2 2:一組相關(guān)變量:一組相關(guān)變量 定義結(jié)構(gòu)體類型定義結(jié)構(gòu)體類型 第10章 說(shuō)明 (1) (1) 結(jié)構(gòu)體類型是一種構(gòu)造數(shù)據(jù)類型結(jié)構(gòu)體類型是一種構(gòu)造數(shù)據(jù)類型,它與,它與int, char,float等系統(tǒng)定義的基本數(shù)據(jù)類型具有同等地位,等系統(tǒng)定義的基本數(shù)據(jù)類型具有同等
7、地位, 是由用戶自行定義的。是由用戶自行定義的。 (2) (2) 結(jié)構(gòu)體類型不結(jié)構(gòu)體類型不分配任何存儲(chǔ)空間。分配任何存儲(chǔ)空間。 相應(yīng)結(jié)構(gòu)體類型的相應(yīng)結(jié)構(gòu)體類型的變量、數(shù)組及動(dòng)態(tài)開(kāi)辟的變量、數(shù)組及動(dòng)態(tài)開(kāi)辟的 存儲(chǔ)單元存儲(chǔ)單元占存儲(chǔ)空間。占存儲(chǔ)空間。 構(gòu)造的數(shù)據(jù)類型可以用來(lái)定義變量構(gòu)造的數(shù)據(jù)類型可以用來(lái)定義變量 第10章 結(jié)構(gòu)體類型的變量和數(shù)組的定義方法 先定義結(jié)構(gòu)體類型,再單獨(dú)進(jìn)行定義先定義結(jié)構(gòu)體類型,再單獨(dú)進(jìn)行定義 在定義類型的同時(shí)定義結(jié)構(gòu)體變量在定義類型的同時(shí)定義結(jié)構(gòu)體變量 在定義一個(gè)無(wú)名結(jié)構(gòu)體類型的同時(shí),直接進(jìn)行定義在定義一個(gè)無(wú)名結(jié)構(gòu)體類型的同時(shí),直接進(jìn)行定義 第10章 方法一 struc
8、t 結(jié)構(gòu)體名結(jié)構(gòu)體名 成員列表成員列表; struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 變量名列表;變量名列表; 或或 結(jié)構(gòu)體名結(jié)構(gòu)體名 變量名列表變量名列表 第10章 例 struct student int num; char name12; char sex; date birthday ; float sc4; ; struct student std,pers3; 或或 student std,pers3; std:結(jié)構(gòu)體變量結(jié)構(gòu)體變量 pers:結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體數(shù)組, (三個(gè)元素均為結(jié)構(gòu)體類型變量)(三個(gè)元素均為結(jié)構(gòu)體類型變量) 第10章 變量std的結(jié)構(gòu) num name sex year
9、month day sc0 sc1 sc2 sc3 birthday 注意:各成員按順序排列注意:各成員按順序排列 第10章 方法二 struct student int num; char name12; char sex; struct date birthday ; float sc4; std,pers3; struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 成員列表成員列表 變量名列表;變量名列表; 第10章 struct int num; char name12; char sex; date birthday ; float sc4; std,pers3; 方法三 struct 成員列表成員列表 變
10、量名列表;變量名列表; 無(wú)結(jié)構(gòu)體名無(wú)結(jié)構(gòu)體名 第10章 結(jié)構(gòu)體類型的幾點(diǎn)說(shuō)明 結(jié)構(gòu)體中的成員可以象變量一樣使用。結(jié)構(gòu)體中的成員可以象變量一樣使用。 成員名可以與程序中的變量同名成員名可以與程序中的變量同名 結(jié)構(gòu)體中的成員也可為結(jié)構(gòu)體變量結(jié)構(gòu)體中的成員也可為結(jié)構(gòu)體變量 類型與變量是完全不同的概念。類型與變量是完全不同的概念。 先定義結(jié)構(gòu)類型,再定義變量為該類型先定義結(jié)構(gòu)類型,再定義變量為該類型 。 類型:類型:不可賦值、存貯、運(yùn)算;系統(tǒng)不分配空間。不可賦值、存貯、運(yùn)算;系統(tǒng)不分配空間。 變量:變量:可賦值、存貯、運(yùn)算;系統(tǒng)要分配空間??少x值、存貯、運(yùn)算;系統(tǒng)要分配空間。 第10章 結(jié)構(gòu)體類型變量
11、初值 struct student int num; char name12; char sex; date birthday ; float sc4; std=10101,liming,m,1962,5,10,88,76,8 5.5,90; 注意:注意: 一一對(duì)應(yīng)賦初值,一一對(duì)應(yīng)賦初值, 不允許跳躍賦值。不允許跳躍賦值。 可只給前面的成員賦值可只給前面的成員賦值 第10章 給結(jié)構(gòu)體數(shù)組賦初值 v數(shù)組中的每個(gè)元素是一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù),數(shù)組中的每個(gè)元素是一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù), 因此將此成員的值依次放在一對(duì)花括號(hào)中因此將此成員的值依次放在一對(duì)花括號(hào)中 例:例: struct bookcard c
12、har num5; float money; bk3=no.1,35.5,no.2,25.0, no.3,66.7; 第10章 給二維結(jié)構(gòu)體數(shù)組賦初值例 struct char ch; int i; float x; arr23=a,1,3e10,a,2,4e10, a,3,5e10,b,1,6e5,b,2,7e5, b,3, 8e5; 第10章 結(jié)構(gòu)體類型變量及其成員的引用 v兩種方式兩種方式 f引用成員引用成員 m結(jié)構(gòu)體變量名結(jié)構(gòu)體變量名.成員名成員名 f引用整體引用整體 struct t int i, j; char name10; ; t t1=12, 48, lili, t2; t2
13、=t1; 其中其中“t2=t1;”等同于:等同于: t2.i=t1.i; t2.j=t1.j; strcpy(, ); 結(jié)構(gòu)體變量的成員可以像普結(jié)構(gòu)體變量的成員可以像普 通變量一樣進(jìn)行各種運(yùn)算,通變量一樣進(jìn)行各種運(yùn)算, 如如stud1.num+、 stud1.sex=stud2.sex; 結(jié)構(gòu)體變量不能 進(jìn)行整體輸入輸出 第10章 優(yōu)先級(jí):優(yōu)先級(jí): 1 結(jié)合性:結(jié)合性: 左左 例:有定義:例:有定義: struct date 對(duì)變量對(duì)變量today作成員選擇運(yùn)算:作成員選擇運(yùn)算: int year ; today. year int型型 int month ; to
14、day. month int型型 int day; today. day int型型 today ; 成員選擇運(yùn)算的結(jié)果是得到了該結(jié)構(gòu)變量的某個(gè)成成員選擇運(yùn)算的結(jié)果是得到了該結(jié)構(gòu)變量的某個(gè)成 員員,其數(shù)據(jù)類型是定義該結(jié)構(gòu)體類型時(shí)成員列表中定,其數(shù)據(jù)類型是定義該結(jié)構(gòu)體類型時(shí)成員列表中定 義的類型。義的類型。 成員運(yùn)算符“.” 第10章 例 struct data int month; int day; int year; ; struct student char name20; char sex; data birthday; int sc4; std,arr5; (1)引用)引用sex st
15、d.sex(通過(guò)結(jié)構(gòu)體變量引用)通過(guò)結(jié)構(gòu)體變量引用) 引用引用arr0中的中的sex: arr0.sex 不能寫作不能寫作 arr.sex 第10章 例 struct data int month; int day; int year; ; struct student char name20; char sex; data birthday; int sc4; std,arr5 ; (2)引用引用sc中的元素,如中的元素,如sc1 std.sc1(通過(guò)結(jié)構(gòu)體變量引用)通過(guò)結(jié)構(gòu)體變量引用) 不能寫成不能寫成std.sc c+語(yǔ)言不允許對(duì)數(shù)組語(yǔ)言不允許對(duì)數(shù)組 整體訪問(wèn)(字符串除外整體訪問(wèn)(字符串
16、除外) 第10章 例 struct data int month; int day; int year; ; struct student char name20; char sex; data birthday; int sc4; std,arr5 ; (3)成員為字符串)成員為字符串 如如name (通過(guò)結(jié)構(gòu)體變量引用)通過(guò)結(jié)構(gòu)體變量引用) 第10章 例 struct data int month; int day; int year; ; struct student char name20; char sex; data birthday; int
17、sc4; std,arr5 ; (4)內(nèi)嵌結(jié)構(gòu)體成員的引用內(nèi)嵌結(jié)構(gòu)體成員的引用 逐層使用成員名定位逐層使用成員名定位 引用引用std中的出生年份中的出生年份 std.birthday.year 只可引用最只可引用最 低一級(jí)成員低一級(jí)成員 第10章 例例是字符串,可以對(duì)它進(jìn)行對(duì)任何是字符串,可以對(duì)它進(jìn)行對(duì)任何 字符串允許的操作,包括輸入輸出。字符串允許的操作,包括輸入輸出。 對(duì)結(jié)構(gòu)體變量中的每個(gè)成員,可對(duì)它進(jìn)行同類對(duì)結(jié)構(gòu)體變量中的每個(gè)成員,可對(duì)它進(jìn)行同類 變量所允許的任何操作。變量所允許的任何操作。 對(duì)結(jié)構(gòu)體變量中的成員進(jìn)行操作 第10章 例 struct data int mo
18、nth; int day; int year; ; struct student char name20; char sex; data birthday; int sc4; std,pers5 ; (1)對(duì))對(duì)name的操作的操作 ; 或或cin.getline(,80); (2)對(duì))對(duì)sex的操作的操作 cinstd.sex; for(i=0;ipersi.sex; std.sex= m; 注意:注意: 不能寫成不能寫成 =li ming 第10章 struct data int month; int day; int year; ;
19、struct student char name20; char sex; data birthday; int sc4; std,pers5; 例 (3)對(duì))對(duì)birthday中中year的操作的操作 cinstd.birthday.year; std.birthday.year=1962; 第10章 結(jié)構(gòu)體數(shù)組 struct student int num; char name20; char sex; int age; float score; char addr30; stud4 = 23901, zang li, f, 19, 78.5, 35 shanghai road, 2390
20、2, wang fang, f, 19, 92, 101 taiping road, 23905, zhao qiang, m, 20, 87, 56 ninghai road, 23908, li hai, m, 19, 95, 48 jiankang road; 第10章 內(nèi)存存儲(chǔ)情況 stud0 stud1 . . . 23901 zang li f 19 78.5 35 shanghai road 23902 wang fang f 19 92 101 taiping road . . . 第10章 結(jié)構(gòu)體數(shù)組的應(yīng)用 問(wèn)題:?jiǎn)栴}:建立一個(gè)學(xué)生檔案的結(jié)構(gòu)體數(shù)組,輸入并輸出學(xué)生的信息。建立
21、一個(gè)學(xué)生檔案的結(jié)構(gòu)體數(shù)組,輸入并輸出學(xué)生的信息。 #include /li0802_2.cpp 輸入輸出學(xué)生信息輸入輸出學(xué)生信息 #include struct student char num16; char name20; float score; ; student input(student stud) stud.score; return stud; 第10章 結(jié)構(gòu)體數(shù)組的應(yīng)用 void output(student stud) coutsetw(10)stud.numsetw(10) setw(10)stud.scoree
22、ndl; void main( ) student studs3; for (int i=0;i3;i+) studsi=input(studsi); coutsetw(10)學(xué)號(hào)學(xué)號(hào)setw(10)姓名姓名setw(20)程程 序設(shè)計(jì)成績(jī)序設(shè)計(jì)成績(jī) endl; for(i=0;i3;i+) output(studsi); coutendl; 傳值調(diào)用傳值調(diào)用 演示演示 第10章 引用調(diào)用 #include /輸入輸出學(xué)生信息輸入輸出學(xué)生信息 #include struct student char num16; char name20; float score; ; void input(s
23、tudent 第10章 引用調(diào)用 void output(student void main( ) student studs3; for (int i=0;i3;i+) input(studsi); coutsetw(10)學(xué)號(hào)學(xué)號(hào)setw(10)姓名姓名setw(20)程程 序設(shè)計(jì)成績(jī)序設(shè)計(jì)成績(jī) endl; for(i=0;i3;i+) output(studsi); coutendl; 第10章 求若干學(xué)生的平均成績(jī) struct stud int num; char name20; int age; char sex; int score; ; #include float avera
24、ge(stud studs, int n) float aver=0; for(int i=0; in; i+) aver += studsi.score; aver /= n; return aver; void main(void) stud studs4= 020110101, wu, 19, m, 80, ; float aver ; aver=average(studs, 4); cout 平均成績(jī)?yōu)槠骄煽?jī)?yōu)? aver name; (*p).id 等效于等效于p-id; (*p).salary 等效于等效于p-salary. 第10章 在使用指針訪問(wèn)成員時(shí),通常使用箭頭操作符在使
25、用指針訪問(wèn)成員時(shí),通常使用箭頭操作符“-”。 例如:下面程序中,定義了結(jié)構(gòu)指針,通過(guò)結(jié)構(gòu)指針訪問(wèn)結(jié)構(gòu)例如:下面程序中,定義了結(jié)構(gòu)指針,通過(guò)結(jié)構(gòu)指針訪問(wèn)結(jié)構(gòu) 成員。成員。 #include #include strut person char name20; unsigned long id; float salary; ; 第10章 void main( ) person pr1; person *p; p= strcpy(p-name, “wang ming”); p-id=12345678; p-salary=4800.0; coutname“ ”p-id“ ”salaryendl; 結(jié)果
26、為:結(jié)果為: wang ming 12345678 4800.0 第10章 如果一個(gè)數(shù)組的元素是同一種結(jié)構(gòu)類型的變量,那么這種如果一個(gè)數(shù)組的元素是同一種結(jié)構(gòu)類型的變量,那么這種 數(shù)組稱為結(jié)構(gòu)數(shù)組。數(shù)組稱為結(jié)構(gòu)數(shù)組。 要定義一個(gè)結(jié)構(gòu)數(shù)組,必須先定義一個(gè)結(jié)構(gòu)類型,然后再要定義一個(gè)結(jié)構(gòu)數(shù)組,必須先定義一個(gè)結(jié)構(gòu)類型,然后再 定義具有這種結(jié)構(gòu)類型的一個(gè)數(shù)組。定義具有這種結(jié)構(gòu)類型的一個(gè)數(shù)組。 例如,定義一個(gè)包含例如,定義一個(gè)包含100個(gè)元素的個(gè)元素的person 結(jié)構(gòu)數(shù)組:結(jié)構(gòu)數(shù)組: struct person char name20; unsigned long id; float salary; ;
27、person allone100; 10.3 結(jié)構(gòu)與數(shù)組結(jié)構(gòu)與數(shù)組 第10章 數(shù)組中每個(gè)元素是一個(gè)完整的結(jié)構(gòu)變量,它包含數(shù)組中每個(gè)元素是一個(gè)完整的結(jié)構(gòu)變量,它包含name、id、 salary三個(gè)成員分量。三個(gè)成員分量。 allone0 訪問(wèn)第一個(gè)數(shù)組元素;訪問(wèn)第一個(gè)數(shù)組元素; allone99訪問(wèn)最后一個(gè)數(shù)組元素。訪問(wèn)最后一個(gè)數(shù)組元素。 例如:下面程序?qū)σ粋€(gè)例如:下面程序?qū)σ粋€(gè)person 結(jié)構(gòu)數(shù)組中的元素進(jìn)行結(jié)構(gòu)數(shù)組中的元素進(jìn)行“冒泡法冒泡法” 排序,工資高的排在后面。排序,工資高的排在后面。 #include struct person char name20; unsigned lon
28、g id; float salary; ; 第10章 person allone6=“jone”,12345,3390.0, “david”,13916,4490.5, “marit”,27519,3110.0, “jasen”,42876,6230.5, “peter”,23987,4000.2, “yoke”,12335,5110.0; void main( ) person temp; for(int i=1; i6;i+) /排序輪次數(shù)排序輪次數(shù) for(int j=0;jallonej+1.salary) /工資高的后移工資高的后移 temp=allonej; allonej=all
29、onej+1; alonej+1=temp; 第10章 for(int k=0;k6;k+) “ ” allonek.id“ ” allonek.salaryendl; 運(yùn)行結(jié)果為:運(yùn)行結(jié)果為: marit 27519 3110.0 jone 12345 3390.0 peter 23987 4000.2 david 13916 4490.5 yoke 12335 5110.0 jasen 42876 6230.5 第10章 結(jié)構(gòu)變量也可以作為實(shí)參數(shù)進(jìn)行函數(shù)調(diào)用??梢圆捎脗髦?、結(jié)構(gòu)變量也可以作為實(shí)參數(shù)進(jìn)行函數(shù)調(diào)用??梢圆捎脗髦怠?傳址、傳引用的三種方式傳遞參數(shù)。
30、傳址、傳引用的三種方式傳遞參數(shù)。 一、傳遞結(jié)構(gòu)變量值一、傳遞結(jié)構(gòu)變量值 因?yàn)閭鬟f的是實(shí)參結(jié)構(gòu)變量中拷貝的數(shù)值,所以實(shí)參結(jié)構(gòu)因?yàn)閭鬟f的是實(shí)參結(jié)構(gòu)變量中拷貝的數(shù)值,所以實(shí)參結(jié)構(gòu) 變量的數(shù)值不會(huì)因?yàn)楹瘮?shù)的調(diào)用而被修改。變量的數(shù)值不會(huì)因?yàn)楹瘮?shù)的調(diào)用而被修改。 例如:下面是一個(gè)傳值調(diào)用的例子例如:下面是一個(gè)傳值調(diào)用的例子 #include struct person char name20; unsiged long id; float saslary; ; 10.4 傳遞結(jié)構(gòu)參數(shù)傳遞結(jié)構(gòu)參數(shù) 第10章 void print(person pr) “ ”pr.id“ ”pr.sal
31、aryendl; person allone4=“jone”,12345,3390.0, “david”,13916,4490.5, “marit”,27519,3110.0, “yoke”,12335,5110.0; void main( ) for(int i=0;i4;i+) print(allonei); /實(shí)參數(shù)為結(jié)構(gòu)數(shù)組元素實(shí)參數(shù)為結(jié)構(gòu)數(shù)組元素 結(jié)果為:結(jié)果為: jone 12345 3390.0 david 13916 4490.5 marit 27519 3110.0 yoke 12335 5110.0 第10章 二、傳遞結(jié)構(gòu)變量的引用二、傳遞結(jié)構(gòu)變量的引用 結(jié)構(gòu)變量也可以按引
32、用方式傳遞,此時(shí)僅把實(shí)參的地址傳結(jié)構(gòu)變量也可以按引用方式傳遞,此時(shí)僅把實(shí)參的地址傳 給形參。由于傳遞的是地址,可以實(shí)現(xiàn)由形參直接修改實(shí)參的給形參。由于傳遞的是地址,可以實(shí)現(xiàn)由形參直接修改實(shí)參的 作用。作用。 引用傳遞沒(méi)有傳遞值的拷貝數(shù)據(jù)過(guò)程,節(jié)省了傳送時(shí)間和引用傳遞沒(méi)有傳遞值的拷貝數(shù)據(jù)過(guò)程,節(jié)省了傳送時(shí)間和 所需的存儲(chǔ)空間,傳遞效率提高。所需的存儲(chǔ)空間,傳遞效率提高。 第10章 例如,將前面的程序改為用引用傳遞結(jié)構(gòu)變量,只需在例如,將前面的程序改為用引用傳遞結(jié)構(gòu)變量,只需在 print( )函數(shù)定義時(shí),將形參說(shuō)明為引用。其函數(shù)調(diào)用方式與傳函數(shù)定義時(shí),將形參說(shuō)明為引用。其函數(shù)調(diào)用方式與傳 遞方式
33、相同。遞方式相同。 void print(person 三、傳遞結(jié)構(gòu)變量的地址三、傳遞結(jié)構(gòu)變量的地址 傳遞結(jié)構(gòu)變量地址與傳遞引用的功能類似,都能實(shí)現(xiàn)雙向傳遞結(jié)構(gòu)變量地址與傳遞引用的功能類似,都能實(shí)現(xiàn)雙向 傳遞。若將前面程序改為傳遞結(jié)構(gòu)變量的地址,只需定義傳遞。若將前面程序改為傳遞結(jié)構(gòu)變量的地址,只需定義 print( )函數(shù)時(shí),將形參說(shuō)明為指向結(jié)構(gòu)變量的指針,函數(shù)調(diào)用函數(shù)時(shí),將形參說(shuō)明為指向結(jié)構(gòu)變量的指針,函數(shù)調(diào)用 時(shí)傳遞實(shí)參結(jié)構(gòu)變量的地址。時(shí)傳遞實(shí)參結(jié)構(gòu)變量的地址。 第10章 返回值為結(jié)構(gòu)類型的函數(shù)稱為結(jié)構(gòu)函數(shù)。返回值為結(jié)構(gòu)類型的函數(shù)稱為結(jié)構(gòu)函數(shù)。 一、返回結(jié)構(gòu)變量一、返回結(jié)構(gòu)變量 一個(gè)函數(shù)
34、可以返回一個(gè)結(jié)構(gòu)變量。在一個(gè)函數(shù)可以返回一個(gè)結(jié)構(gòu)變量。在main( )中,調(diào)用結(jié)構(gòu)中,調(diào)用結(jié)構(gòu) 函數(shù)的返回值必須賦于具有相同結(jié)構(gòu)類型的變量。函數(shù)的返回值必須賦于具有相同結(jié)構(gòu)類型的變量。 例如:例如: #include struct person char name20; unsigned long id; float salary; ; 10.5 結(jié)構(gòu)函數(shù)結(jié)構(gòu)函數(shù) 第10章 person getperson( ) /定義返回結(jié)構(gòu)變量的函數(shù)定義返回結(jié)構(gòu)變量的函數(shù) person temp; ; couttemp.idtemp.salary; return temp; /返
35、回結(jié)構(gòu)變量返回結(jié)構(gòu)變量temp void print(person 第10章 void main( ) person employee3; for(int i=0;i3;i+) employeei=getperson( ); /返回值賦給同類型的結(jié)構(gòu)變量返回值賦給同類型的結(jié)構(gòu)變量 print(employeei); 結(jié)果:結(jié)果: please enter a name for one person: marit please enter ones id number and his salary: 27519 3110.0 marit 27519 3110.0 第10章 如果將上例中的如果將上
36、例中的getperson( )函數(shù)改為引用傳遞,則可提高函數(shù)改為引用傳遞,則可提高 程序運(yùn)行效率,省去函數(shù)返回值賦以同類型結(jié)構(gòu)變量的操作。程序運(yùn)行效率,省去函數(shù)返回值賦以同類型結(jié)構(gòu)變量的操作。 改寫后的程序如下:改寫后的程序如下: #include struct person char name20; unsigned long id; float salary; ; void getperson(person coutp.idp.salary; 第10章 void print(person void main( ) person employee3; for(int i=0;i3;i+) g
37、etperson(employeei); /函數(shù)調(diào)用后,實(shí)參獲取輸入數(shù)據(jù)函數(shù)調(diào)用后,實(shí)參獲取輸入數(shù)據(jù) print(employeei); 二、返回結(jié)構(gòu)的引用二、返回結(jié)構(gòu)的引用 一個(gè)函數(shù)可以返回一個(gè)結(jié)構(gòu)引用,也可以返回一個(gè)結(jié)構(gòu)指針。一個(gè)函數(shù)可以返回一個(gè)結(jié)構(gòu)引用,也可以返回一個(gè)結(jié)構(gòu)指針。 第10章 一、結(jié)構(gòu)的嵌套一、結(jié)構(gòu)的嵌套 結(jié)構(gòu)可以嵌套,即結(jié)構(gòu)中可以是另一個(gè)結(jié)構(gòu)類型的成員變結(jié)構(gòu)可以嵌套,即結(jié)構(gòu)中可以是另一個(gè)結(jié)構(gòu)類型的成員變 量。例如:量。例如: struct person struct date char name10; int month; int age; int day; float w
38、age; int year; data payday; ; worker; 也可以表示為:也可以表示為: 10.6 鏈表結(jié)構(gòu)鏈表結(jié)構(gòu) 第10章 struct person char name10; int wage; struct date int month; int day; int year; payday; worker; 結(jié)構(gòu)變量結(jié)構(gòu)變量payday 是嵌套在結(jié)構(gòu)是嵌套在結(jié)構(gòu)person 內(nèi)的內(nèi)的一個(gè)成員分量。一個(gè)成員分量。 在訪問(wèn)嵌套結(jié)構(gòu)的成員時(shí),可以使用多個(gè)點(diǎn)操作符,從最外層在訪問(wèn)嵌套結(jié)構(gòu)的成員時(shí),可以使用多個(gè)點(diǎn)操作符,從最外層 到最內(nèi)層逐個(gè)列出成員名:到最內(nèi)層逐個(gè)列出成員名:
39、worker.wage=5000.0; worker.payday.month=11; 第10章 二、鏈表結(jié)構(gòu)二、鏈表結(jié)構(gòu) 結(jié)構(gòu)成員變量不能包含有自身的結(jié)構(gòu)變量,但可以是指向結(jié)構(gòu)成員變量不能包含有自身的結(jié)構(gòu)變量,但可以是指向 該結(jié)構(gòu)變量的指針。該結(jié)構(gòu)變量的指針。 通過(guò)包含一個(gè)指向自身結(jié)構(gòu)的指針,可以實(shí)現(xiàn)不連續(xù)分布通過(guò)包含一個(gè)指向自身結(jié)構(gòu)的指針,可以實(shí)現(xiàn)不連續(xù)分布 的結(jié)構(gòu)變量的遍歷。的結(jié)構(gòu)變量的遍歷。 如下面的結(jié)構(gòu):如下面的結(jié)構(gòu): strct list char name20; list *pn; 其中,其中,name成員含有實(shí)際的信息;成員含有實(shí)際的信息;pn 是是指向另一個(gè)指向另一個(gè)list
40、 結(jié)結(jié) 構(gòu)變量的指針。構(gòu)變量的指針。 第10章 顯然,通過(guò)結(jié)構(gòu)變量中的指針成員鏈接,能構(gòu)成任意長(zhǎng)度的顯然,通過(guò)結(jié)構(gòu)變量中的指針成員鏈接,能構(gòu)成任意長(zhǎng)度的 結(jié)構(gòu)鏈,這樣的結(jié)構(gòu)鏈稱為鏈表。鏈表中的每個(gè)結(jié)構(gòu)鏈,這樣的結(jié)構(gòu)鏈稱為鏈表。鏈表中的每個(gè)list 結(jié)構(gòu)變量稱為結(jié)構(gòu)變量稱為 一個(gè)結(jié)點(diǎn)。一個(gè)結(jié)點(diǎn)。 marit0074:8854divid0074:88f2鏈?zhǔn)字羔樻準(zhǔn)字羔?0074: 8ac2 0074: 8854 susen0074:28f6anenull 0074: 28f6 0074: 38fa jone0074:38fa 0074: 88f2 第10章 鏈表是由一個(gè)個(gè)有序的結(jié)點(diǎn)組成的,每個(gè)結(jié)
41、點(diǎn)是同類型的鏈表是由一個(gè)個(gè)有序的結(jié)點(diǎn)組成的,每個(gè)結(jié)點(diǎn)是同類型的 結(jié)構(gòu)變量。結(jié)構(gòu)變量。 通過(guò)程序可以建立和顯示鏈表,可以插入、刪除及增加結(jié)通過(guò)程序可以建立和顯示鏈表,可以插入、刪除及增加結(jié) 點(diǎn)來(lái)維護(hù)鏈表。點(diǎn)來(lái)維護(hù)鏈表。 鏈表總是包含有鏈?zhǔn)字羔槪湵淼牟僮饕话愣枷扔涉準(zhǔn)字告湵砜偸前墟準(zhǔn)字羔?,鏈表的操作一般都先由鏈?zhǔn)字?針引導(dǎo)。針引導(dǎo)。 三、鏈表的創(chuàng)建與遍歷三、鏈表的創(chuàng)建與遍歷 例如:下面程序建立一個(gè)鏈表,并輸出該鏈表。例如:下面程序建立一個(gè)鏈表,并輸出該鏈表。 #include struct student long number; float score; student *next; ;
42、第10章 student *head; /鏈?zhǔn)字羔樻準(zhǔn)字羔?student *greate( ) /創(chuàng)建鏈表函數(shù)創(chuàng)建鏈表函數(shù) student *ps; /創(chuàng)建新結(jié)點(diǎn)指針創(chuàng)建新結(jié)點(diǎn)指針 student *pend; /移動(dòng)的鏈尾指針,用于在其后插入結(jié)點(diǎn)移動(dòng)的鏈尾指針,用于在其后插入結(jié)點(diǎn) ps=new student; /動(dòng)態(tài)申請(qǐng)新建結(jié)點(diǎn)的存儲(chǔ)空間動(dòng)態(tài)申請(qǐng)新建結(jié)點(diǎn)的存儲(chǔ)空間 cinps-numberps-score; /結(jié)點(diǎn)賦值結(jié)點(diǎn)賦值 head=null; /開(kāi)始時(shí)鏈表為空開(kāi)始時(shí)鏈表為空 pend=ps; while(ps-number!=0) if(head=null) head=ps; el
43、se pend-next=ps; 第10章 pend=ps; /s點(diǎn)點(diǎn) ps=new student; cinps-numberps-score; pend-next=null; delete ps; return(head); void showlist(student *head) cout“the items of list are:n”; while(head) coutnumber“, ”scorenext; 第10章 void main( ) showlist(greate( ); 輸入:輸入: 結(jié)果:結(jié)果: 401 85.0 the items of list are: 410
44、73.0 401, 85.0 425 91.0 410, 73.0 413 68.0 425, 91.0 432 82.0 413, 68.0 0 0 432, 82.0 在在main( )中,把建立鏈表函數(shù)中,把建立鏈表函數(shù)greate( )的返回值的返回值head(指向鏈指向鏈 表指針表指針)作為實(shí)參數(shù)調(diào)用作為實(shí)參數(shù)調(diào)用showlist( )函數(shù)。函數(shù)。 第10章 greate( )函數(shù)中,鏈表創(chuàng)建過(guò)程如下圖所示:函數(shù)中,鏈表創(chuàng)建過(guò)程如下圖所示: 進(jìn)入循環(huán)之前:進(jìn)入循環(huán)之前: head null 第一次進(jìn)入循環(huán)到達(dá)第一次進(jìn)入循環(huán)到達(dá)s點(diǎn):點(diǎn): pend ps head 第一次循環(huán)結(jié)束后:第
45、一次循環(huán)結(jié)束后: head pend ps 40185.0 40185.0 71073.0 第10章 第二次循環(huán)到達(dá)第二次循環(huán)到達(dá)s點(diǎn)時(shí):點(diǎn)時(shí): head pend ps 第二次循環(huán)結(jié)束時(shí):第二次循環(huán)結(jié)束時(shí): head pend ps 程序結(jié)束時(shí):程序結(jié)束時(shí): head 40185.041073.0 40185.041073.0 42591.0 40185.041073.042591.0 41368.043282.0null 第10章 共用體的定義及應(yīng)用 v問(wèn)題的提出:?jiǎn)栴}的提出:表格表格 “學(xué)生班級(jí)學(xué)生班級(jí) / 教師職務(wù)教師職務(wù)” name num sex job li 1011 f s 5
46、01 zhou 2085 m t prof class position struct people char name10; int num; char sex; char job; union int class; char position20; category; ; class 和和 position 的使用是互斥的,可分成兩列,的使用是互斥的,可分成兩列, 為節(jié)省空間,合并成一列。為節(jié)省空間,合并成一列。 第10章 共用體變量的定義 不同數(shù)據(jù)類型的一組變量使用同一組內(nèi)存單元。不同數(shù)據(jù)類型的一組變量使用同一組內(nèi)存單元。 union data char c; float f; int i ; ; union data a,b,c; 或或data a,b,c; union data char c; float f; int i ; a,b,c; union char c; float f; int i ; a,b,c; 共用體變量的定義同結(jié)構(gòu)體一樣有三種形式:共用體變量的定義同結(jié)構(gòu)體一樣有三種形式: 關(guān)鍵字關(guān)鍵字共用體名共用體名 共用體類型共用體類型 第10章 使用共用體變量 引用成員引用成員 a.i /引用共用體變量中的整型變量引用共用體變量中的整型變量i a.c /引
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《國(guó)際貨運(yùn)代理》題集
- 《規(guī)范漢字書寫傳承中華文化之美》班會(huì)教案3篇
- 3.4.1 二次函數(shù)y=ax2+k與y=a(x-h)2的圖象與性質(zhì) 同步練習(xí)
- 【人教】期末模擬卷01【九年級(jí)上下冊(cè)】
- 專項(xiàng)24-弧、弦、角、距的關(guān)系-重難點(diǎn)題型
- 特殊作業(yè)票管理制度
- 語(yǔ)法專題十六 主謂一致【考點(diǎn)精講精練】-2023年中考語(yǔ)法一點(diǎn)通(學(xué)生版)
- 青花瓷的教案8篇
- 新生軍訓(xùn)心得體會(huì)
- 暑假自我總結(jié)
- 監(jiān)理檢測(cè)與試驗(yàn)儀器設(shè)備一覽表實(shí)用文檔
- 部編版五年級(jí)上冊(cè)第二單元《習(xí)作“漫畫”老師》一等獎(jiǎng)創(chuàng)新教案
- 醫(yī)院影像科醫(yī)療安全不良事件報(bào)告制度
- GB/T 7364-1987石蠟易碳化物試驗(yàn)法
- 2023年聚合物材料表征測(cè)試題庫(kù)
- 碟式離心機(jī)圖片集
- 2020人文素養(yǎng)試題及答案
- 高血壓(英文版)-課件
- 冷庫(kù)安裝與維修4-1(冷庫(kù)的安全防護(hù))課件
- 螺紋一螺紋基礎(chǔ)知識(shí)
- 實(shí)驗(yàn)室生物安全組織框架
評(píng)論
0/150
提交評(píng)論