第08章結(jié)構(gòu)體和枚舉類型_第1頁
第08章結(jié)構(gòu)體和枚舉類型_第2頁
第08章結(jié)構(gòu)體和枚舉類型_第3頁
第08章結(jié)構(gòu)體和枚舉類型_第4頁
第08章結(jié)構(gòu)體和枚舉類型_第5頁
已閱讀5頁,還剩86頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第8章結(jié)構(gòu)體和枚舉類型 本章要點(diǎn): 教學(xué)目標(biāo)教學(xué)目標(biāo)本章講解結(jié)構(gòu)和結(jié)構(gòu)變量的定義格式、結(jié)構(gòu)成員的表示、結(jié)構(gòu)變量的賦初值和賦值、結(jié)構(gòu)變量的運(yùn)算。在此基礎(chǔ)上進(jìn)一步講述結(jié)構(gòu)與指針、結(jié)構(gòu)與數(shù)組、結(jié)構(gòu)與函數(shù)的應(yīng)用。 教學(xué)重點(diǎn)和難點(diǎn)教學(xué)重點(diǎn)和難點(diǎn) 結(jié)構(gòu)體類型的定義 定義和初始化結(jié)構(gòu)體變量 類型定義typedef 結(jié)構(gòu)體數(shù)組 結(jié)構(gòu)體指針 結(jié)構(gòu)體與函數(shù) 單向鏈表及其操作 枚舉類型在現(xiàn)實(shí)生活中,有許多不同性質(zhì)的數(shù)據(jù)實(shí)體。比如,通訊錄通常由姓名、電話、E-mail、年齡等組成。姓名、電話、E-mail和所在城市可以用字符串表示,年齡可以用整型數(shù)表示??墒撬鼈兊拿恳豁?xiàng)都是單獨(dú)使用的,不能反映通訊錄這樣一個(gè)整體。用什

2、么方法表示通訊錄這個(gè)整體呢?新的被稱為結(jié)構(gòu)體的數(shù)據(jù)類型。為我們處理復(fù)雜的數(shù)據(jù)提供了便利的手段。8.1.1 什么是結(jié)構(gòu)體結(jié)構(gòu)體(structure)是一種數(shù)據(jù)類型,它把互相聯(lián)系的數(shù)據(jù)組合成一個(gè)整體。例如,下面的表格顯示了一個(gè)通訊錄的信息:表8-1 一個(gè)通訊錄的信息表一個(gè)通訊錄中有姓名、電話、性別、年齡、E-mail地址、所在城市,這些信息都是和一個(gè)叫“李明”的人有關(guān)。如果我們只把這些信息分別定義為獨(dú)立的簡單變量,就體現(xiàn)不出它們之間的相互關(guān)聯(lián)了。所以,應(yīng)當(dāng)把它們組織成一個(gè)組合項(xiàng),在一個(gè)組合項(xiàng)中包含若干個(gè)類型不同的數(shù)據(jù)項(xiàng)。用“結(jié)構(gòu)體”來定義。8.1 結(jié)構(gòu)體類型8.1.2 結(jié)構(gòu)體的定義結(jié)構(gòu)體既然是一種

3、數(shù)據(jù)類型,在使用前,先要“定義”出要使用的結(jié)構(gòu)體類型。例:將通訊錄定義成一個(gè)結(jié)構(gòu)體。通訊錄的信息由六項(xiàng)屬性組成,首先要給這個(gè)結(jié)構(gòu)體類型定義取一個(gè)名字,比如“AddressList”。然后,應(yīng)該在結(jié)構(gòu)體定義中對(duì)各屬性進(jìn)行說明。下面就是“通訊錄”結(jié)構(gòu)體類型:struct AddressListchar name20;/* 姓名姓名 */ char telephone12;/* 電話電話 */ char sex;/* 性別性別 */ int age;/* 年齡年齡 */ char e_mail40;/* 電子郵件電子郵件 */ char addr30;/* 地址地址 */ ;8.1 結(jié)構(gòu)體類型其中,

4、“struct”是關(guān)鍵字,是結(jié)構(gòu)體的標(biāo)識(shí)符,不能省略?!癆ddressList”是結(jié)構(gòu)體類型名,它由我們自己進(jìn)行命名的?!?”中是結(jié)構(gòu)體的成員,每個(gè)成員的數(shù)據(jù)類型既可以是簡單的數(shù)據(jù)類型,也可以是復(fù)雜的數(shù)據(jù)類型,當(dāng)然也可以是其他結(jié)構(gòu)體數(shù)據(jù)類型。最后,定義完一個(gè)結(jié)構(gòu)體后一定要用一個(gè)分號(hào)“;”結(jié)束。從上面這個(gè)例子,可以看出結(jié)構(gòu)體定義格式如下: 8.1 結(jié)構(gòu)體類型struct 名字 成員說明1;成員說明2;成員說明3;成員說明n; ;可以定義許多復(fù)雜的數(shù)據(jù)類型。比如,定義一個(gè)表示日期的結(jié)構(gòu)體:struct dateint year;/* 年年*/int month;/* 月月*/int day;/*

5、日日*/;用日期這種結(jié)構(gòu)體,我們就可以表示生日、開學(xué)時(shí)間、春節(jié)等等這樣的日期。8.1 結(jié)構(gòu)體類型也可把兩種結(jié)構(gòu)體類型結(jié)合起來,“造出”更復(fù)雜的結(jié)構(gòu)體。比如,一個(gè)通訊錄的結(jié)構(gòu)體中包含了表示出生日期的結(jié)構(gòu)體struct date:struct AddressListchar name20;/* 姓名姓名 */ char telephone12;/* 電話電話 */ char sex;/* 性別性別 */ int age;/* 年齡年齡 */ char e_mail40;/* 電子郵件電子郵件 */ char addr30;/* 地址地址 */ struct date birthday;/* 出生日

6、期出生日期 */;8.1 結(jié)構(gòu)體類型我們先“造出”一個(gè)日期的結(jié)構(gòu)體類型,同時(shí)我們又在通訊錄這個(gè)結(jié)構(gòu)體中,將出生日期這個(gè)成員變量定義為日期類型,這樣通訊錄結(jié)構(gòu)體就變成更復(fù)雜一些的數(shù)據(jù)類型了。這樣的結(jié)構(gòu)可以叫做嵌套型的結(jié)構(gòu)體,其結(jié)構(gòu)可以如圖8-1示意:圖8-1 嵌套型的結(jié)構(gòu)體示意8.1 結(jié)構(gòu)體類型nametelephonesexageemailaddryearmonthdaybirthday8.1.3 定義結(jié)構(gòu)體變量既然我們定義的結(jié)構(gòu)體是一種數(shù)據(jù)類型,就可以像int、char、float這樣的數(shù)據(jù)類型一樣來使用,定義結(jié)構(gòu)體類型的變量。用結(jié)構(gòu)體類型定義變量的方式有如下幾種:1. 先定義結(jié)構(gòu)體類型,再

7、定義變量例,定義一個(gè)通訊錄結(jié)構(gòu)體:struct AddressListchar name20;/* 姓名姓名 */ char telephone12;/* 電話電話 */ char sex;/* 性別性別 */ int age;/* 年齡年齡 */ char e_mail40;/* 電子郵件電子郵件 */ char addr30;/* 地址地址 */ ; /* 定義定義2個(gè)結(jié)構(gòu)體變量個(gè)結(jié)構(gòu)體變量 */struct AddressList AddressList1, AddressList2;8.1 結(jié)構(gòu)體類型定義了兩個(gè)“AddressList”結(jié)構(gòu)體類型的變量AddressList1和Addr

8、essList2。它們可以分別表示兩個(gè)人的通訊錄,比如:AddressList1:AddressList2:圖8-2 結(jié)構(gòu)體變量8.1 結(jié)構(gòu)體類型結(jié)構(gòu)體變量中的各個(gè)成員,在內(nèi)存中是順序存放的。各成員變量所占內(nèi)存的大小是根據(jù)定義時(shí)它們的數(shù)據(jù)類型來決定。為了方便,也可以這樣定義結(jié)構(gòu)體變量:#define ADDRESSLIST struct AddressListADDRESSLISTchar name20;/* 姓名姓名 */ char telephone12;/* 電話電話 */ char sex;/* 性別性別 */ int age;/* 年齡年齡 */ char e_mail40;/* 電

9、子郵件電子郵件 */ char addr30;/* 地址地址 */ ;ADDRESSLIST AddressList1, AddressList2;8.1 結(jié)構(gòu)體類型定義的這個(gè)符號(hào)常量“ADDRESSLIST”,它就代表了結(jié)構(gòu)體類型“struct AddressList”。這樣,在未來的程序設(shè)計(jì)中,“ADDRESSLIST”可以和“struct AddressList”完全等效使用了。2. 在定義結(jié)構(gòu)體類型的同時(shí)聲明變量struct AddressListchar name20;/* 姓名姓名 */ char telephone12;/* 電話電話 */ char sex;/* 性別性別 */

10、 int age;/* 年齡年齡 */ char e_mail40;/* 電子郵件電子郵件 */ char addr30;/* 地址地址 */ AddressList1, AddressList2; 8.1 結(jié)構(gòu)體類型這種方式和前面定義的方式效果一樣,在定義結(jié)構(gòu)體的同時(shí),定義了2個(gè)struct AddressList類型的變量AddressList1, AddressList2。這種方式通常用于函數(shù)中使用的局部結(jié)構(gòu)體變量。3. 直接定義變量還可以用下面的方式直接定義結(jié)構(gòu)體變量:struct /* 省略結(jié)構(gòu)體名稱省略結(jié)構(gòu)體名稱 */char name20;/* 姓名姓名 */ char tele

11、phone12;/* 電話電話 */ char sex;/* 性別性別 */ int age;/* 年齡年齡 */ char e_mail40;/* 電子郵件電子郵件 */ char addr30;/* 地址地址 */ AddressList1, AddressList2;8.1 結(jié)構(gòu)體類型這種方式?jīng)]有給出結(jié)構(gòu)體名,通常也用于函數(shù)中使用的局部結(jié)構(gòu)體變量。注意:1)對(duì)于結(jié)構(gòu)體變量,在定義時(shí),一定要先定義一個(gè)結(jié)構(gòu)體類型,然后再定義該類型的變量。只能對(duì)結(jié)構(gòu)體變量賦值、存取或運(yùn)算,但不能對(duì)一個(gè)結(jié)構(gòu)體類型進(jìn)行這些操作;2)對(duì)結(jié)構(gòu)體中的組成成員,可以單獨(dú)使用,它的作用相當(dāng)于普通變量。4. 類型定義type

12、def在編寫程序的過程中,為了便于修改和表達(dá)清晰,我們往往還可以給數(shù)據(jù)類型取別名,在C+語言中叫做類型定義。類型定義的關(guān)鍵字是typedef,其使用格式為: 8.1 結(jié)構(gòu)體類型typedef 數(shù)據(jù)類型標(biāo)識(shí)符 別名; 比如我們給整型標(biāo)識(shí)符int取個(gè)別名,叫做Integer,可以這樣寫:typedef int Integer;Integer k;這樣定義的變量k就是一個(gè)整型數(shù)。8.1 結(jié)構(gòu)體類型同樣可以對(duì)一個(gè)結(jié)構(gòu)體進(jìn)行類型定義,也就是給這個(gè)結(jié)構(gòu)體取個(gè)別名。比如給前面定義的通訊錄取個(gè)別名,并用別名定義變量:typedef struct AddressListchar name20;/* 姓名姓名 *

13、/ char telephone12;/* 電話電話 */ char sex;/* 性別性別 */ int age;/* 年齡年齡 */ char e_mail40;/* 電子郵件電子郵件 */ char addr30;/* 地址地址 */ ADDR_LIST;/* 定義定義2個(gè)個(gè)struct AddressList類型的變量類型的變量 */ADDR_LIST AddressList1, AddressList2;或者:struct AddressListtypedef struct AddressList ADDR_LIST;也可省略結(jié)構(gòu)體的名稱AddressList,寫成如下的形式:typ

14、edef structADDR_LIST;8.1 結(jié)構(gòu)體類型8.1.4 結(jié)構(gòu)體變量的初始化1. 結(jié)構(gòu)體整體初始化聲明一個(gè)結(jié)構(gòu)體變量時(shí),可以對(duì)它進(jìn)行初始化,這和初始化一個(gè)數(shù)組是類似的。結(jié)合上面定義的通訊錄結(jié)構(gòu)體類型struct AddressList,我們定義了一個(gè)struct AddressList變量one,并對(duì)它進(jìn)行初始化:struct AddressList one = 李明李明,M,16,北京北京;8.1 結(jié)構(gòu)體類型注意:不能在定義結(jié)構(gòu)體類型的時(shí)候,進(jìn)行賦初值。例如:struct AddressList/* 下面的做法就是錯(cuò)誤的下面的做法就是錯(cuò)誤的 */char name =Li Li

15、n;char telephone12= ;char sex = M;int age=18;char e_mail40=;char addr30= 123 Bejing Road; one;例8.1 定義一個(gè)結(jié)構(gòu)體變量,并進(jìn)行整體初始化,再輸出其結(jié)果內(nèi)容。程序清單 C08_01.cpp#include /*結(jié)構(gòu)體定義部分結(jié)構(gòu)體定義部分*/struct AddressListchar name20;/* 姓名姓名 */ char telephone12;/* 電話電話 */ char sex;/* 性別性別 */ int age;/* 年齡年齡 */ char e_mail40;/* 電子郵件電子

16、郵件 */ char addr30;/* 地址地址 */ ;8.1 結(jié)構(gòu)體類型void main()/*定義并初始化結(jié)構(gòu)體變量定義并初始化結(jié)構(gòu)體變量*/struct AddressList one = 李明李明,M,16,北京北京;/*結(jié)構(gòu)體變量的輸出結(jié)構(gòu)體變量的輸出*/cout 我們定義并初始化的結(jié)構(gòu)體是:我們定義并初始化的結(jié)構(gòu)體是:n endl;cout 姓名是:姓名是: endl 電話號(hào)碼是:電話號(hào)碼是: one.telephone endl;cout 性別是:性別是: one.sex endlcout 所在城市是:所在城市是: one.addr endl;8.1 結(jié)構(gòu)

17、體類型輸出結(jié)果:我們定義并初始化的結(jié)構(gòu)體是:我們定義并初始化的結(jié)構(gòu)體是:姓名是:李明姓名是:李明電話號(hào)碼是:電話號(hào)碼是:性別是:性別是:M年齡是:年齡是:16E-mail地址是:地址是:所在城市是:北京所在城市是:北京其中的“”、“one.telephone”是通過“.”運(yùn)算符訪問結(jié)構(gòu)體變量的成員。一般情況下,不能將一個(gè)結(jié)構(gòu)體變量作為整體來使用,只能使用其中的成員(分量)。使用結(jié)構(gòu)體成員的方式: 8.1 結(jié)構(gòu)體類型結(jié)構(gòu)體變量名. .成員名通過這種方式,我們就可以使用結(jié)構(gòu)體變量one中的成員了。例:cout , one.telephone , one.sex ,

18、 one.age , one.e_mail , one.age;8.1 結(jié)構(gòu)體類型3. 逐級(jí)訪問成員在前面曾經(jīng)定義了包含生日的通訊錄結(jié)構(gòu)體,生日這個(gè)成員變量又是日期結(jié)構(gòu)體類型。對(duì)于生日這個(gè)成員變量,我們可以一級(jí)一級(jí)訪問其成員。例如:AddressList1.birthday.month = 9;AddressList1.birthday.day = 20;AddressList1.birthday.year = 1994;8.1 結(jié)構(gòu)體類型4. 把結(jié)構(gòu)體變量當(dāng)作整體賦值只有在以下兩種情況下,才可以把結(jié)構(gòu)體變量作為一個(gè)整體來賦值和訪問。1)結(jié)構(gòu)體變量整體賦值例:AddressList2 = Ad

19、dressList1;通過這種模式,可以直接完成結(jié)構(gòu)體之間的賦值。2)取結(jié)構(gòu)體變量地址例如:cout AddressList1.telephone;/*輸入輸入AddressList1的電話的電話*/需要注意,不能把結(jié)構(gòu)體變量整體輸入進(jìn)來。例如:cin AddressList1;我們?cè)谑褂媒Y(jié)構(gòu)體變量時(shí),通常把結(jié)構(gòu)體變量的地址用作函數(shù)的參數(shù),以實(shí)現(xiàn)傳地址調(diào)用。8.1 結(jié)構(gòu)體類型8.1.5 結(jié)構(gòu)體數(shù)組我們知道,一個(gè)結(jié)構(gòu)體變量可以存放一組相關(guān)的數(shù)據(jù)(例如,一個(gè)通訊錄可以存放一個(gè)人的姓名、電話、性別、年齡、E-mail和地址等信息),正如前面引入數(shù)組一樣,我們也可以定義一個(gè)數(shù)組,其每一成員都是一個(gè)結(jié)構(gòu)

20、體,它們都分別包含多個(gè)成員變量。1. 結(jié)構(gòu)體數(shù)組的定義我們?cè)诙x結(jié)構(gòu)體數(shù)組之前,首先要進(jìn)行結(jié)構(gòu)體類型的定義。然后再像以前介紹過的數(shù)組定義方式定義結(jié)構(gòu)體數(shù)組。8.1 結(jié)構(gòu)體類型例如,我們定義一個(gè)具有3個(gè)元素的通訊錄結(jié)構(gòu)體數(shù)組:/*定義結(jié)構(gòu)體類型定義結(jié)構(gòu)體類型*/typedef struct AddressListchar name20;/* 姓名姓名 */ char telephone12;/* 電話電話 */ char sex; /* 性別性別 */ int age;/* 年齡年齡 */ char e_mail40;/* 電子郵件電子郵件 */ char addr30;/* 地址地址 */ A

21、DDR_LIST;/*定義結(jié)構(gòu)體數(shù)組定義結(jié)構(gòu)體數(shù)組*/ADDR_LIST addlist3; /* 定義有定義有3個(gè)元素的結(jié)構(gòu)體數(shù)組個(gè)元素的結(jié)構(gòu)體數(shù)組 */這樣就定義了一個(gè)具有3個(gè)元素的結(jié)構(gòu)體數(shù)組,這些數(shù)組元素在內(nèi)存中是連續(xù)存放的。8.1 結(jié)構(gòu)體類型2. 結(jié)構(gòu)體數(shù)組的初始化我們可以把結(jié)構(gòu)體初始化和數(shù)組元素初始化結(jié)合起來,對(duì)結(jié)構(gòu)體數(shù)組進(jìn)行初始化。經(jīng)過初始化,就可以分別輸出結(jié)構(gòu)體數(shù)組元素的值。例8.2 結(jié)構(gòu)體數(shù)組的初始化。程序清單 C08_02.cpp#include typedef struct char name20;/* 姓名姓名 */ char telephone12;/* 電話電話 */

22、 char sex; /* 性別性別 */ int age;/* 年齡年齡 */ char e_mail40;/* 電子郵件電子郵件 */ char addr30;/* 地址地址 */ ADDR_LIST;8.1 結(jié)構(gòu)體類型void Print( ADDR_LIST *, int Count );void main()/*定義并初始化結(jié)構(gòu)體變量定義并初始化結(jié)構(gòu)體變量*/ADDR_LIST addrlist3 = 李明李明, , M, 16, , 北京北京,王芳王芳, , F, 20, , 上海上海,Marry, , F, 19, , 武漢武漢,;Print(addrlist, 3);8.1 結(jié)

23、構(gòu)體類型void Print(ADDR_LIST *List, int Count)int i;/*結(jié)構(gòu)體變量的輸出結(jié)構(gòu)體變量的輸出*/cout 我們定義并初始化的結(jié)構(gòu)體數(shù)組的數(shù)據(jù)如下:我們定義并初始化的結(jié)構(gòu)體數(shù)組的數(shù)據(jù)如下:nn;for (i = 0; i Count; i+)cout 第第 i + 1 個(gè)記錄:個(gè)記錄: endl;cout 姓名:姓名: L endl;cout 電話號(hào)碼:電話號(hào)碼: Listi.telephone endl;cout 性別:性別: Listi.sex endl;cout 年齡:年齡: Listi.age endl;cout E-mail:

24、Listi.e_mail endl;cout 所在城市:所在城市: Listi.addr endl;cout endl;8.1 結(jié)構(gòu)體類型輸出結(jié)果我們定義并初始化的結(jié)構(gòu)體數(shù)組的數(shù)據(jù)如下:我們定義并初始化的結(jié)構(gòu)體數(shù)組的數(shù)據(jù)如下:第第1個(gè)記錄:個(gè)記錄: 姓名:李明姓名:李明電話號(hào)碼:電話號(hào)碼: 性別:性別:M 年齡:年齡:16 E-mail:所在城市:北京所在城市:北京第第2個(gè)記錄:個(gè)記錄: 姓名:王芳姓名:王芳電話號(hào)碼:電話號(hào)碼: 性別:性別:F 年齡:年齡:20 E-mail:所在城市:上海所在城市:上海8.1 結(jié)構(gòu)體類型第第3個(gè)記錄:個(gè)記錄: 姓名:姓名:Marry電話號(hào)碼:電話號(hào)碼: 性別

25、:性別:F 年齡:年齡:19 E-mail:所在城市:武漢所在城市:武漢8.1 結(jié)構(gòu)體類型8.1.6 結(jié)構(gòu)體指針結(jié)構(gòu)體指針,就是一個(gè)結(jié)構(gòu)體類型的指針,它指向一個(gè)結(jié)構(gòu)體變量。這和整型指針、字符指針是一樣的。其實(shí)例8.2的Print函數(shù)中就使用了結(jié)構(gòu)體指針作為形參(*List)。1. 結(jié)構(gòu)體指針我們?cè)倏匆粋€(gè)應(yīng)用結(jié)構(gòu)體指針的小例子。例8.3 我們定義一個(gè)表示某人生日的結(jié)構(gòu)體變量,同時(shí)定義一個(gè)結(jié)構(gòu)體指針指向它,分別通過結(jié)構(gòu)體變量和結(jié)構(gòu)體指針輸出結(jié)構(gòu)體成員的值,觀察其結(jié)果的不同。8.1 結(jié)構(gòu)體類型程序清單 C08_03.cpp/*結(jié)構(gòu)體變量和結(jié)構(gòu)體指針的關(guān)系結(jié)構(gòu)體變量和結(jié)構(gòu)體指針的關(guān)系*/#includ

26、e /*結(jié)構(gòu)體類型定義,其中結(jié)構(gòu)體結(jié)構(gòu)體類型定義,其中結(jié)構(gòu)體date是結(jié)構(gòu)體是結(jié)構(gòu)體PERSON的成員變量的成員變量*/struct dateint month;/*表示月,從表示月,從112*/int day;/*表示日期,從表示日期,從131*/int year;/*表示年表示年*/;/*定義結(jié)構(gòu)體類型,并且是復(fù)合(成員變量是結(jié)構(gòu)體類型)類型定義結(jié)構(gòu)體類型,并且是復(fù)合(成員變量是結(jié)構(gòu)體類型)類型*/typedef structint No;/*序號(hào)序號(hào)*/char name20; /*姓名姓名*/struct date birthday;/*出生日期出生日期*/ PERSON;8.1 結(jié)構(gòu)

27、體類型void main()PERSON Users; /*定義定義Users是一個(gè)結(jié)構(gòu)體變量是一個(gè)結(jié)構(gòu)體變量*/PERSON *p;/*定義定義*p是一個(gè)結(jié)構(gòu)體指針是一個(gè)結(jié)構(gòu)體指針*/cout 請(qǐng)輸入結(jié)構(gòu)體變量的信息:請(qǐng)輸入結(jié)構(gòu)體變量的信息:n;cout Users.No;/* Users.No是整型變量是整型變量 */cout U;/* U字符數(shù)組的名字符數(shù)組的名字,其表示地址字,其表示地址 */cout Users.birthday.year Users.birthday.month Users.birthday.day;p = &Users;/*將結(jié)

28、構(gòu)體變量將結(jié)構(gòu)體變量Users的地址賦值給指針的地址賦值給指針p*/cout n通過結(jié)構(gòu)體變量輸出的結(jié)果是:通過結(jié)構(gòu)體變量輸出的結(jié)果是:n;cout 序號(hào):序號(hào): Users.No endl8.1 結(jié)構(gòu)體類型 姓名:姓名: U endl 生日:生日: Users.birthday.year Users.birthday.month Users.birthday.day endl;cout n通過結(jié)構(gòu)體指針變量輸出的結(jié)果:通過結(jié)構(gòu)體指針變量輸出的結(jié)果:n;cout 序號(hào):序號(hào): (*p).No endl 姓名:姓名: (*p).name endl 生日:生日: (*p).bir

29、thday.year (*p).birthday.month (*p).birthday.day ”表示為“p-No”。同樣,“(*p).name”也等價(jià)于“p-name”。因此,下面三種形式是等價(jià)的:Users.成員名成員名(*p).成員名成員名p-成員名成員名有了這些規(guī)則,我們可以把上面“通過結(jié)構(gòu)體指針變量輸出”的語句改為:printf(序號(hào)是:序號(hào)是:%dn姓名是:姓名是:%sn生日是:生日是:%d-%d-%dn, p-No, p-name, p-birthday.month, p-birthday.day, p-birthday.year);其中“-”稱為指向運(yùn)算符。8.1 結(jié)構(gòu)體類型

30、2. 指向結(jié)構(gòu)體數(shù)組的指針指針和數(shù)組之間的關(guān)系十分密切:如果指針p指向數(shù)組的某個(gè)特定元素,那么p+1就指向該數(shù)組中下一個(gè)元素,p+i指向該元素后面第i個(gè)元素,p-i指向該元素之前第i個(gè)元素。 同樣,對(duì)結(jié)構(gòu)體數(shù)組及其元素也可以用指針變量來指向。例,我們?cè)诶?.2中定義了一個(gè)結(jié)構(gòu)體數(shù)組,并進(jìn)行了初始化?,F(xiàn)在我們用指向結(jié)構(gòu)體數(shù)組的指針進(jìn)行操作,結(jié)果會(huì)是怎么樣呢?例8.4 定義一個(gè)結(jié)構(gòu)體數(shù)組變量,進(jìn)行數(shù)組元素的整體初始化,并利用指向結(jié)構(gòu)體數(shù)組的指針輸出結(jié)構(gòu)體的數(shù)據(jù)。8.1 結(jié)構(gòu)體類型程序清單 C08_04.cpp#include /*結(jié)構(gòu)體定義部分結(jié)構(gòu)體定義部分*/struct AddressList

31、char name20;/* 姓名姓名 */ char telephone12;/* 電話電話 */ char sex;/* 性別性別 */ int age;/* 年齡年齡 */ char e_mail40;/* 電子郵件電子郵件 */ char addr30;/* 地址地址 */ ;typedef struct AddressList ADDR_LIST;/* 將此結(jié)構(gòu)體類型定義為將此結(jié)構(gòu)體類型定義為ADDR_LIST */8.1 結(jié)構(gòu)體類型void main()/*定義并初始化結(jié)構(gòu)體變量定義并初始化結(jié)構(gòu)體變量*/ADDR_LIST List3=李明李明, , M, 16, , 北京北京,王

32、芳王芳, , F, 20, , 上海上海,Marry, , F, 19, , 武漢武漢,;ADDR_LIST *p;/*定義一個(gè)指向結(jié)構(gòu)體類型的指針定義一個(gè)指向結(jié)構(gòu)體類型的指針*/*結(jié)構(gòu)體變量的輸出結(jié)構(gòu)體變量的輸出*/cout 用指向結(jié)構(gòu)體數(shù)組的指針輸出的結(jié)構(gòu)體變量值是:用指向結(jié)構(gòu)體數(shù)組的指針輸出的結(jié)構(gòu)體變量值是:n;for ( p = List; p List + 3; p+ )cout endl;cout 姓名:姓名: name endl 電話號(hào)碼:電話號(hào)碼: telephone endl;cout 性別:性別: sex endl 年齡:年齡: age endl;8.1 結(jié)構(gòu)體類型cout

33、 e_mail: e_mail endl;cout 所在城市:所在城市: addr telephone”先使p自加1,然后得到它指向的元素中的telephone成員值,即“List1.telephone ()”?!?p+)-telephone”先得到“p-telephone”的值,即,然后再p自加1,即指向List1。2)如果定義p是結(jié)構(gòu)體類型ADDR_LIST的指針,它只能指向一個(gè)此結(jié)構(gòu)體類型的變量。例如,下面這樣描述是錯(cuò)誤的:p = &;/* 錯(cuò)誤錯(cuò)誤 */8.1 結(jié)構(gòu)體類型8.1.7 結(jié)構(gòu)體與函數(shù)有時(shí),我們想把一個(gè)結(jié)構(gòu)體變量的值傳遞給另一個(gè)函數(shù),用什么方法呢?

34、可以利用前面學(xué)過函數(shù)的傳值調(diào)用,既可以傳遞單個(gè)結(jié)構(gòu)體成員也可以傳遞整個(gè)結(jié)構(gòu)體。例如:用L或List0.telephone作函數(shù)的實(shí)參,通過函數(shù)調(diào)用將實(shí)參值傳遞給形參。這種用法和用普通變量作實(shí)參沒有任何區(qū)別,都是“值傳遞”方式,被調(diào)用函數(shù)無法修改主調(diào)函數(shù)中的結(jié)構(gòu)體變量成員。如果我們需要被調(diào)用函數(shù)能改變主調(diào)函數(shù)中結(jié)構(gòu)體變量成員,該用什么方法呢?通過指針的學(xué)習(xí),自然使我們想到可以用指向結(jié)構(gòu)體變量的指針作實(shí)參,或?qū)⒔Y(jié)構(gòu)體變量的地址作為實(shí)參調(diào)用函數(shù)。比起傳值調(diào)用,傳地址方式不需要對(duì)整個(gè)結(jié)構(gòu)體做一份拷貝,只需要把結(jié)構(gòu)體變量的地址傳遞給函數(shù)就可以了。 8.1 結(jié)構(gòu)體類型圖 8-5 回顧:傳

35、值和傳地址調(diào)用的比較示意8.1 結(jié)構(gòu)體類型主調(diào)函數(shù)被調(diào)函數(shù)函數(shù)形參(a) 傳值調(diào)用實(shí)際參數(shù)復(fù)制主調(diào)函數(shù)被調(diào)函數(shù)函數(shù)形參(b) 傳引用調(diào)用實(shí)際參數(shù)指向先讓我們看一看指針指向結(jié)構(gòu)體變量的小例子!例8.5 用結(jié)構(gòu)體變量的地址作為實(shí)參調(diào)用函數(shù)。定義一個(gè)結(jié)構(gòu)體包括學(xué)生的學(xué)號(hào)、姓名和三門主課(數(shù)學(xué)、語文、英語)的成績和平均分。在主函數(shù)main定義此結(jié)構(gòu)體變量Exam,調(diào)用函數(shù)GetInfo()輸入賦值到Exam,再調(diào)用函數(shù)Comp()計(jì)算平均分并輸出。程序清單 C08_05.cpp#include typedef structint math;/*數(shù)學(xué)成績數(shù)學(xué)成績*/int chinese;/*語文成績語

36、文成績*/int english;/*英語成績英語成績*/ SCORE;8.1 結(jié)構(gòu)體類型typedef structint No;/* 學(xué)號(hào)學(xué)號(hào) */char Name20;/* 姓名姓名 */SCORE Score;/* 三門成績?nèi)T成績 */int Average_score;/* 平均分平均分 */Information;/*函數(shù)聲明部分函數(shù)聲明部分*/void GetInfo(Information *p);/* 從鍵盤輸入數(shù)據(jù)從鍵盤輸入數(shù)據(jù) */ void Comp(Information *p);/* 計(jì)算平均分計(jì)算平均分 */ void main()Information Ex

37、am;/* 定義一個(gè)學(xué)生信息的結(jié)構(gòu)體變量定義一個(gè)學(xué)生信息的結(jié)構(gòu)體變量 */GetInfo(&Exam);/* 輸入結(jié)構(gòu)體變量的成員值,用地址作為參數(shù)輸入結(jié)構(gòu)體變量的成員值,用地址作為參數(shù) */Comp(&Exam);/*用地址作為參數(shù)用地址作為參數(shù) */8.1 結(jié)構(gòu)體類型void GetInfo( Information *p ) /* 形參采用指針類型形參采用指針類型 */cout 請(qǐng)輸入一位學(xué)生的信息:請(qǐng)輸入一位學(xué)生的信息:n;cout p-No;cout p-Name;cout Name p-Score.math p-Score.chinese p-Score.english;void

38、Comp( Information *p )/* 形參采用指針類型形參采用指針類型 */p-Average_score = ( p-Score.math + p-Score.chinese + p-Score.english )/3;8.1 結(jié)構(gòu)體類型cout n調(diào)用函數(shù)調(diào)用函數(shù) Comp() 計(jì)算計(jì)算 Name 的平均成績?nèi)缦拢旱钠骄煽內(nèi)缦拢簄;cout 學(xué)號(hào):學(xué)號(hào): No endl 數(shù)學(xué):數(shù)學(xué): Score.math , 語文:語文: Score.chinese , 英語:英語: Score.english endl;cout 三門功課平均成績:三門功課平均成績: Average_sco

39、re Average_score) = 85 )cout 成績優(yōu)秀!成績優(yōu)秀!n;elsecout 成績一般!成績一般!n;8.1 結(jié)構(gòu)體類型輸出結(jié)果請(qǐng)輸入一位學(xué)生的信息:請(qǐng)輸入一位學(xué)生的信息:學(xué)號(hào):學(xué)號(hào):010姓名:姓名:JordanJordan的三門主課成績的三門主課成績(數(shù)學(xué)數(shù)學(xué),語文語文,英語英語)是:是: 98,76,97調(diào)用函數(shù)調(diào)用函數(shù)Comp()計(jì)算計(jì)算Jordan的平均成績?nèi)缦拢旱钠骄煽內(nèi)缦拢簩W(xué)號(hào):學(xué)號(hào): 10數(shù)學(xué):數(shù)學(xué): 98,語文:,語文: 76,英語:,英語: 97三門功課平均成績:三門功課平均成績: 90成績優(yōu)秀!成績優(yōu)秀!8.1 結(jié)構(gòu)體類型這里,輸入函數(shù)GetInf

40、o(),計(jì)算函數(shù)Comp()的形參都是結(jié)構(gòu)體Information類型的指針。在調(diào)用它們的時(shí)候,使用Information類型變量Exam的地址,這樣在函數(shù)中對(duì)形參的修改就是直接對(duì)實(shí)參的修改。圖8-6(a)是調(diào)用函數(shù)GetInfo()或者Comp()后的實(shí)參和形參的關(guān)系。 (a)函數(shù)形參是結(jié)構(gòu)體指針,實(shí)參是結(jié)構(gòu)體變量地址,調(diào)用后,指針指向?qū)崊⒌慕Y(jié)構(gòu)體8.1 結(jié)構(gòu)體類型Exam(主函數(shù)中定義,作為實(shí)參)NoNameScoreAverage_Score函數(shù)中的形參 p p(b) 例8.5中的兩個(gè)函數(shù)GetInfo()、Comp()處理的數(shù)據(jù)都是主函數(shù)中定義的Exam圖8-6 函數(shù)形參是結(jié)構(gòu)體指針,

41、實(shí)參是結(jié)構(gòu)體變量地址8.1 結(jié)構(gòu)體類型主函數(shù)main結(jié) 構(gòu) 體 變 量Examp 函數(shù)Comp()處理函數(shù)GetInfo() p 處理在C+語言中,允許將整個(gè)結(jié)構(gòu)體作為函數(shù)的參數(shù)進(jìn)行傳遞,當(dāng)然必須保證函數(shù)的形參和實(shí)參類型必須相同。但這種方法,程序運(yùn)行時(shí)需要將全部成員一個(gè)一個(gè)傳遞給函數(shù),又費(fèi)時(shí)、又浪費(fèi)空間,開銷太大。如果結(jié)構(gòu)體類型中成員很多,比如一個(gè)大的結(jié)構(gòu)體,這種情況下,還是使用結(jié)構(gòu)體指針進(jìn)行函數(shù)參數(shù)傳遞,效率要更高。下面我們用傳遞結(jié)構(gòu)體變量和傳遞結(jié)構(gòu)體指針的方法修改,并輸入一個(gè)結(jié)構(gòu)體變量,從中體會(huì)不同的參數(shù)傳遞方式的差異。例8.6 定義一個(gè)日期結(jié)構(gòu)體類型,并定義一個(gè)日期結(jié)構(gòu)體變量,對(duì)其初始化

42、。編寫兩個(gè)函數(shù),一個(gè)的形參是日期結(jié)構(gòu)體類型,一個(gè)的形參是日期結(jié)構(gòu)體指針類型。兩個(gè)函數(shù)中都先對(duì)形參修改,然后輸出。8.1 結(jié)構(gòu)體類型程序清單 C08_06.cpp#include /*結(jié)構(gòu)體定義部分結(jié)構(gòu)體定義部分*/typedef structint year; /*年年*/int month;/*月月*/int day;/*日日*/DATE ;8.1 結(jié)構(gòu)體類型/*函數(shù)定義函數(shù)定義*/void Mp1(DATE OneDay)OneDay.year = 1999;void Mp2(DATE *pOneDay)pOneDay-year = 2050;void main()DATE OneDay

43、= 2002, 10, 1;/*定義一個(gè)結(jié)構(gòu)體定義一個(gè)結(jié)構(gòu)體DATE類型變量,并初始化類型變量,并初始化*/DATE *p = &OneDay;/*定義一個(gè)結(jié)構(gòu)體定義一個(gè)結(jié)構(gòu)體DATE指針變量指針變量, 并指向并指向OneDay*/cout 日期結(jié)構(gòu)體變量原始值:日期結(jié)構(gòu)體變量原始值:;cout year - month - day;cout endl;8.1 結(jié)構(gòu)體類型Mp1(OneDay);cout n調(diào)用傳值函數(shù)調(diào)用傳值函數(shù) Mp1( DATE OneDay ) 的結(jié)果:的結(jié)果:;cout OneDay.year - OneDay.month - OneDay.day;cout endl

44、;Mp2(p);/* 等價(jià)于等價(jià)于 Mp2( &OneDay ) */cout n調(diào)用傳指針函數(shù)調(diào)用傳指針函數(shù) Mp2( DATE *pOneDay ) 的結(jié)果:的結(jié)果:;cout year - month - day;cout endl;輸出結(jié)果日期結(jié)構(gòu)體變量原始值:日期結(jié)構(gòu)體變量原始值:2002-10-1調(diào)用傳值函數(shù)調(diào)用傳值函數(shù)Mp1( DATE OneDay )的結(jié)果:的結(jié)果:2002-10-1調(diào)用傳指針函數(shù)調(diào)用傳指針函數(shù)Mp2( DATE *pOneDay )的結(jié)果:的結(jié)果:2050-10-18.1 結(jié)構(gòu)體類型通過上面這段程序,我們可以看到,調(diào)用Mp1()不會(huì)影響實(shí)參值,而調(diào)用Mp2(

45、)就會(huì)影響實(shí)參值,我們從中可以再次體會(huì)到傳值和傳地址調(diào)用的不同。下面用圖8-7示意這個(gè)實(shí)例的參數(shù)傳遞情況。8.1 結(jié)構(gòu)體類型圖8-7 例8.7中的調(diào)用函數(shù)Mp1()、Mp2()參數(shù)傳遞情況8.1 結(jié)構(gòu)體類型Mp2()DATE pOneDayMp1()yearmonthdayDATE OneDay傳遞地址(指向)傳遞地址(指向)DATE OneDayyearmonthday傳遞數(shù)據(jù)傳遞數(shù)據(jù)在實(shí)際生活中,我們常常遇到這樣一些情況:交通燈只有紅、黃、綠三種顏色;一個(gè)星期有七天;一年有十二個(gè)月;一個(gè)小組有張三、李四等。這些變量的取值被限定在一個(gè)有限的范圍內(nèi),如果把這些量說明為整型、字符型或其他類型顯然

46、都不合適。為此,語言提供了一種稱為“枚舉”的類型。所謂“枚舉”是指將變量的值一一列舉出來,變量的值只限于列舉出來的值范圍內(nèi)。這樣,被說明為該“枚舉”類型的變量取值就不能超過定義的范圍了。需要說明的是,枚舉類型是一種基本數(shù)據(jù)類型,而不是一種構(gòu)造類型,因?yàn)樗荒茉俜纸鉃槿魏位绢愋?。在定義結(jié)構(gòu)體的時(shí)候,我們也可以應(yīng)用枚舉類型。8.2 枚舉類型8.2.1 枚舉類型的定義枚舉類型和其他基本數(shù)據(jù)類型一樣,在使用它聲明變量之前,必須先定義枚舉類型。定義枚舉類型定義的格式為: 枚舉類型的定義語句的關(guān)鍵字是enum。用戶定義的枚舉類型名,它是一個(gè)標(biāo)識(shí)符,表示一個(gè)新的枚舉類型。花括號(hào)括起來的是該類型定義體,其中

47、的內(nèi)容又稱為枚舉表。枚舉表是一組由用戶命名的符號(hào)常量,它們用逗號(hào)分開,每個(gè)符號(hào)常量又稱為枚舉常量或枚舉值。枚舉表內(nèi)的值確定了枚舉類型變量的取值范圍。例如,我們定義:enum color red, yellow, green;enum day Sun, Mon, Tues, Wed, Thur, Fri, Sat;8.2 枚舉類型enum 枚舉類型名 枚舉表;其中,red、yellow、green,Sun、MonSat稱為“枚舉元素”或“枚舉常量”。第一條語句定義了一個(gè)枚舉類型color,用來表示交通燈的顏色,它的取值范圍是三個(gè)枚舉值red、yellow和green,分別代表紅色、黃色和綠色。第

48、二條語句定義了一個(gè)枚舉類型day,用來表示日期,它包含7個(gè)枚舉值,分別表示星期日、星期一至星期六。另外枚舉表中的元素都是常量,它們規(guī)定了枚舉變量的取值范圍。數(shù)組可就不同了,數(shù)組的元素可以是基本類型、或者用戶自定義的數(shù)據(jù)類型等,而且數(shù)組元素是變量。8.2 枚舉類型8.2.2 枚舉變量的聲明定義了一個(gè)枚舉類型,我們可以用它來定義變量。例如,在前面定義了枚舉類型enum color,我們可以使用它來定義變量:enum color stop, go;或者為:enum color red, yellow, green stop, go;后面的stop,go是該類型的兩個(gè)變量,它們的取值只能是red, y

49、ellow, green之一。例如:stop = red;go = green;8.2 枚舉類型8.2.3 枚舉類型變量的賦值和使用枚舉類型在使用中有以下規(guī)定:1. 枚舉元素是常量在編譯器中,枚舉元素本身由系統(tǒng)定義了一個(gè)表示序號(hào)的數(shù)值,從0開始順序定義為0,1,2如在enum day中,Sun值為0,Mon值為1Sat值為6。例8.7 我們可以按整型數(shù)據(jù)輸出枚舉類型變量的值:程序清單 C08_7.cpp#include enum color red, yellow, green ;8.2 枚舉類型void main()enum color stop, go;/*聲明枚舉變量聲明枚舉變量stop

50、,go*/stop = red;/*為枚舉變量賦值為枚舉變量賦值*/go = green;printf(枚舉變量枚舉變量go的值是:的值是:%dn, go);printf(枚舉變量枚舉變量stop的值是:的值是:%dn, stop);輸出結(jié)果枚舉變量枚舉變量go的值是:的值是:2枚舉變量枚舉變量stop的值是:的值是:0程序中,語句“enum color red, yellow, green ;”在確定枚舉值的同時(shí)分別為它們定義了表示序號(hào)的值:red為0,yellow為1,green為2。同時(shí),枚舉變量的值只能用賦值語句來獲得。8.2 枚舉類型2. 允許在定義枚舉類型時(shí),指定枚舉常量的值。例如

51、:enum color red = 3, yellow = 1, green;這里,green的值從yellow的值順序加1。即,green 的值是2。8.2 枚舉類型3. 枚舉值可以作判斷例如:if (stop = red)cout 請(qǐng)停車!請(qǐng)停車!n;4. 整型與枚舉類型是不同的數(shù)據(jù)類型,不能進(jìn)行直接賦值例,錯(cuò)誤的賦值:stop = 2;/* stop是枚舉類型是枚舉類型 */不過,可以通過強(qiáng)制類型轉(zhuǎn)換,對(duì)枚舉變量賦值整型值。例如:stop = (enum color) 2;8.2 枚舉類型8.2.4 枚舉類型的應(yīng)用舉例例8.8 在屏幕上提示:請(qǐng)用戶選擇行走的方向,然后顯示出所選方向。程序

52、清單C08_8.cpp#include #include void main()char *question = 請(qǐng)選擇方向請(qǐng)選擇方向 1:西西, 2:北北, 3:東東, 4:南南 ;char *pwest = 你選擇向西你選擇向西;char *pnorth = 你選擇向北你選擇向北;char *peast = 你選擇向東你選擇向東;char *psouth = 你選擇向南你選擇向南;enum location west = 1, north = 2, east = 3, south = 4 ;enum location direction;8.2 枚舉類型int n;cout n;direc

53、tion = (enum location) n;switch (direction)case west: cout pwest endl; break;case north: cout pnorth endl; break;case east: cout peast endl; break;case south: cout psouth endl; break;default: cout 在原地等待在原地等待n; break;8.2 枚舉類型輸出結(jié)果請(qǐng)選擇方向請(qǐng)選擇方向 1:西西, 2:北北, 3:東東, 4:南南2你選擇向北你選擇向北從上面這段程序可以看出,用枚舉類型能夠很方便地制作一個(gè)選

54、擇菜單。例8.9 在結(jié)構(gòu)體中定義枚舉類型的成員。定義一個(gè)結(jié)構(gòu)體類型Regist用于統(tǒng)計(jì)學(xué)生注冊(cè)情況(學(xué)號(hào)、姓名、注冊(cè)日期),其中成員注冊(cè)日期是枚舉類型變量(從Sun到Sat七天)。輸入學(xué)生注冊(cè)信息,根據(jù)注冊(cè)日期(比如星期三之前)判斷一個(gè)學(xué)生是否遲到,并顯示結(jié)果。8.2 枚舉類型程序清單 C08_9.cpp#include #include #define COUNT 4/*定義枚舉類型,表示注冊(cè)時(shí)間定義枚舉類型,表示注冊(cè)時(shí)間*/enum day Sun, Mon, Tues, Wed, Thur, Fri, Sat ;/*定義注冊(cè)情況結(jié)構(gòu)體定義注冊(cè)情況結(jié)構(gòu)體*/typedef struct c

55、har name20;/*姓名姓名*/int number;/*學(xué)號(hào)學(xué)號(hào)*/enum day Regist_day;/*注冊(cè)時(shí)間注冊(cè)時(shí)間*/ Regist ;void Input(Regist *stu);/*用于輸入學(xué)生注冊(cè)情況的函數(shù)用于輸入學(xué)生注冊(cè)情況的函數(shù)*/int Judge(Regist *stu);/*判斷學(xué)生是否遲到的函數(shù)判斷學(xué)生是否遲到的函數(shù)*/8.2 枚舉類型void main()Regist studentCOUNT;/*定義四個(gè)學(xué)生的數(shù)組定義四個(gè)學(xué)生的數(shù)組*/Regist *p; /*結(jié)構(gòu)體數(shù)組指針結(jié)構(gòu)體數(shù)組指針*/int n=0;/*用于統(tǒng)計(jì)多少學(xué)生遲到用于統(tǒng)計(jì)多少學(xué)生遲到*

溫馨提示

  • 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. 人人文庫網(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)論