C++結(jié)構(gòu)體,共同體和枚舉_第1頁
C++結(jié)構(gòu)體,共同體和枚舉_第2頁
C++結(jié)構(gòu)體,共同體和枚舉_第3頁
C++結(jié)構(gòu)體,共同體和枚舉_第4頁
C++結(jié)構(gòu)體,共同體和枚舉_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1第七章第七章 結(jié)構(gòu)體、共同體和枚舉類型結(jié)構(gòu)體、共同體和枚舉類型 2定義:定義:將將不同種類型不同種類型的數(shù)據(jù)有序地的數(shù)據(jù)有序地組合在一起組合在一起,構(gòu),構(gòu)造出一個造出一個新的數(shù)據(jù)類型新的數(shù)據(jù)類型,這種形式稱為,這種形式稱為結(jié)構(gòu)結(jié)構(gòu)體。體。結(jié)構(gòu)體是多種類型組合的結(jié)構(gòu)體是多種類型組合的數(shù)據(jù)類型數(shù)據(jù)類型。3struct 結(jié)構(gòu)體名結(jié)構(gòu)體名 成員列表成員列表 ;struct student int num; char name20; char sex; char addr30; ;結(jié)構(gòu)體名結(jié)構(gòu)體名關(guān)鍵字關(guān)鍵字不同數(shù)據(jù)不同數(shù)據(jù)類型組成類型組成的的成員成員分號不能少分號不能少4定義結(jié)構(gòu)體類型變量的方法定義

2、結(jié)構(gòu)體類型變量的方法一、先定義結(jié)構(gòu)體類型再定義變量名一、先定義結(jié)構(gòu)體類型再定義變量名struct student int num; char name20; char sex; int age; float score; char addr30;struct student student1, student2;結(jié)構(gòu)體類型名結(jié)構(gòu)體類型名變量變量1變量變量2結(jié)構(gòu)體類型只是一種數(shù)據(jù)結(jié)構(gòu)體類型只是一種數(shù)據(jù)類型,不占內(nèi)存空間,只類型,不占內(nèi)存空間,只有定義結(jié)構(gòu)體類型有定義結(jié)構(gòu)體類型變量變量時時才開辟內(nèi)存空間。才開辟內(nèi)存空間。5# define STUDENT struct student STUDEN

3、T int num; char name20; char sex; int age; float score; char addr30; ; STUDENT student1,student2;凡是凡是STUDENT的地的地方都用方都用struct student 機械替換。機械替換。6二、在定義類型的同時定義變量二、在定義類型的同時定義變量struct student int num; char name20; char sex; int age; float score; char addr30; student1, student2;structstruct 結(jié)構(gòu)體名結(jié)構(gòu)體名 成員列表成

4、員列表 變量名列表;變量名列表; 緊接著定緊接著定義變量義變量7三、直接定義結(jié)構(gòu)體類型變量三、直接定義結(jié)構(gòu)體類型變量struct int num; char name20; char sex; int age; float score; char addr30; student1, student2;struct 成員列表成員列表 變量名列表;變量名列表; 不出現(xiàn)結(jié)構(gòu)體名。不出現(xiàn)結(jié)構(gòu)體名。82 2、在編譯時,僅對、在編譯時,僅對變量變量分配空間,不對分配空間,不對類型類型分配分配空間??臻g。1 1、結(jié)構(gòu)體類型的變量在內(nèi)存、結(jié)構(gòu)體類型的變量在內(nèi)存依照其成員的順序依照其成員的順序順順序排列,所占內(nèi)

5、存空間的大小是其全體成員所占空序排列,所占內(nèi)存空間的大小是其全體成員所占空間的間的總和總和。3 3、對結(jié)構(gòu)體中各個成員可以單獨引用、賦值,其、對結(jié)構(gòu)體中各個成員可以單獨引用、賦值,其作用與變量等同。作用與變量等同。格式:格式:變量名變量名 . . 成員名成員名 student1 . numstudent1 . num94 4、結(jié)構(gòu)體的成員可以是另一個結(jié)構(gòu)體類型。、結(jié)構(gòu)體的成員可以是另一個結(jié)構(gòu)體類型。struct date int month; int day; int year; ;struct student int num; char name20; struct date birthda

6、y; ;成員類型成員類型成員名成員名5 5、成員名可以與程序中的變量名相同,二者分占不同的內(nèi)、成員名可以與程序中的變量名相同,二者分占不同的內(nèi)存單元,互不干擾。例如,在程序中仍可以定義變量存單元,互不干擾。例如,在程序中仍可以定義變量 intint num; num;10結(jié)構(gòu)體類型變量的引用結(jié)構(gòu)體類型變量的引用1 1、不能對結(jié)構(gòu)體變量整體賦值或輸出,只能分別對、不能對結(jié)構(gòu)體變量整體賦值或輸出,只能分別對各個成各個成員員引用。引用。cincinstudent1;student1;cincinstudent1.num; student1.num=100;student1.num; student1

7、.num=100;可以將一個結(jié)構(gòu)體變量可以將一個結(jié)構(gòu)體變量整體整體賦給另外一個相同類型的結(jié)構(gòu)賦給另外一個相同類型的結(jié)構(gòu)體變量。體變量。 student2=student1;student2=student1;2 2、嵌套的結(jié)構(gòu)體變量必須逐層引用。、嵌套的結(jié)構(gòu)體變量必須逐層引用。student1.student1.birthday.birthday.dayday=25;=25;3 3、結(jié)構(gòu)體變量中的成員可以同一般變量一樣進行運算。、結(jié)構(gòu)體變量中的成員可以同一般變量一樣進行運算。student1.birthday.day+; student1.score+=60;student1.birthday

8、.day+; student1.score+=60;錯誤錯誤必須用成員名引用必須用成員名引用11對局部變量類型的結(jié)構(gòu)體變量初始化對局部變量類型的結(jié)構(gòu)體變量初始化void main(void) struct student long int num; char name20; char sex; char addr30; student1=901031, “Li Lin”, M, “123 Beijing Road”;endl;輸出:輸出: LiLin對變量初始化,一一賦值對變量初始化,一一賦值12關(guān)于結(jié)構(gòu)類型變量的使用,說明以下幾點關(guān)于結(jié)構(gòu)類型變量的使用,說明

9、以下幾點: :1 1、同類型的結(jié)構(gòu)體變量之間可以直接賦值。這種、同類型的結(jié)構(gòu)體變量之間可以直接賦值。這種賦值等同于各個成員的依次賦值。賦值等同于各個成員的依次賦值。 2 2、結(jié)構(gòu)體變量不能直接進行輸入輸出,它的每一、結(jié)構(gòu)體變量不能直接進行輸入輸出,它的每一個個成員成員能否直接進行輸入輸出,取決于其成員的類能否直接進行輸入輸出,取決于其成員的類型,若是基本類型或是字符數(shù)組,則可以直接輸入型,若是基本類型或是字符數(shù)組,則可以直接輸入輸出。輸出。3 3、結(jié)構(gòu)體變量可以作為函數(shù)的參數(shù),函數(shù)也可以、結(jié)構(gòu)體變量可以作為函數(shù)的參數(shù),函數(shù)也可以返回結(jié)構(gòu)體的值。當函數(shù)的形參與實參為結(jié)構(gòu)體類返回結(jié)構(gòu)體的值。當函數(shù)

10、的形參與實參為結(jié)構(gòu)體類型的變量時,這種結(jié)合方式屬于值調(diào)用方式,即屬型的變量時,這種結(jié)合方式屬于值調(diào)用方式,即屬于值傳遞。(舉例說明)于值傳遞。(舉例說明)13結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組中的結(jié)構(gòu)體數(shù)組中的每個元素都是一個結(jié)構(gòu)體類型的變每個元素都是一個結(jié)構(gòu)體類型的變量量,其中包括該類型的各個成員。數(shù)組各元素在內(nèi),其中包括該類型的各個成員。數(shù)組各元素在內(nèi)存中連續(xù)存放。存中連續(xù)存放。14一、結(jié)構(gòu)體數(shù)組的定義一、結(jié)構(gòu)體數(shù)組的定義struct student int num; char name20; char sex; int age; float score; char addr30; ;stru

11、ct student stu30;struct student int num; char name20; char sex; int age; float score; char addr30; stu30;直接定義直接定義15二、結(jié)構(gòu)體數(shù)組的初始化二、結(jié)構(gòu)體數(shù)組的初始化struct student int num; char name20; char sex; stu3= 1011, Li Lin,M, 1012,Wang Lan,F, 1013,Liu Fang,F;16struct student int num; char name20; char sex; stu = 1011,L

12、i Lin,M, 1012,Wang Lan,F, 1013,Liu Fang,F;17以下程序的結(jié)果是:以下程序的結(jié)果是:void main(void) struct date int year, month, day; today; coutsizeof(struct date)endl; 1218根據(jù)下面的定義,能打印出字母根據(jù)下面的定義,能打印出字母M的語句是:的語句是:struct person char name9; int age; ;struct person class10= “Jone”,17, “Paul”,19, “Mary”,18, “Adam”,16 ;A) cou

13、endl;B) 1endl;C) 1endl;D) 0endl;輸出:輸出:Adam輸出:輸出:d輸出:輸出:a輸出:輸出:M19結(jié)構(gòu)體類型的靜態(tài)成員 當把結(jié)構(gòu)體類型中的某一個成員的存儲類型定義為靜態(tài)時,表示當把結(jié)構(gòu)體類型中的某一個成員的存儲類型定義為靜態(tài)時,表示在這種結(jié)構(gòu)類型的所有變量中,編譯程序為這個成員只分配一個在這種結(jié)構(gòu)類型的所有變量中,編譯程序為這個成員只分配一個存儲空間,即這種結(jié)構(gòu)體類型的所有變量共同使用這個成員的存存儲空間,即這種結(jié)構(gòu)體類型的所有變量共同使用這個成員的

14、存儲空間儲空間。 :;其中類型要與在結(jié)構(gòu)體中定義該成員的類型一致,結(jié)構(gòu)體類型名其中類型要與在結(jié)構(gòu)體中定義該成員的類型一致,結(jié)構(gòu)體類型名指明靜態(tài)成員屬于哪一個結(jié)構(gòu)體指明靜態(tài)成員屬于哪一個結(jié)構(gòu)體。 struct sstatic int id;int eng;int s:id=50;這時,未定義結(jié)構(gòu)體變量,這時,未定義結(jié)構(gòu)體變量,但已將靜態(tài)成員的空間安但已將靜態(tài)成員的空間安排好排好。數(shù)據(jù)類型結(jié)構(gòu)體類型若有定義:s s1,s2;則變量s1,s2的id成員占用同一存儲空間(靜態(tài)區(qū))。20在結(jié)構(gòu)體中說明的靜態(tài)成員屬于引用性說明,必須在文件作用域中的某一個地方對靜態(tài)的成員進行定義性說明,且僅能說明一次。in

15、t s:id; 說明id的初值為0(靜態(tài)變量的缺省初值均為靜態(tài)變量的缺省初值均為0) 21共用體共用體C+語言中,允許語言中,允許不同的數(shù)據(jù)類型使用不同的數(shù)據(jù)類型使用同一存儲區(qū)域同一存儲區(qū)域,即,即同一存儲區(qū)域由不同類型的變量共同表示。這種數(shù)據(jù)類型同一存儲區(qū)域由不同類型的變量共同表示。這種數(shù)據(jù)類型就是共用體。就是共用體。union 共用體名共用體名 成員表列;成員表列; 變量表列;變量表列;union data int i; char ch; float f; a, b, c;union data a, b, c;這幾個成員在共用體變量中存放在同一地址,相互覆蓋,這幾個成員在共用體變量中存放在

16、同一地址,相互覆蓋,其長度為最長的成員的長度其長度為最長的成員的長度。22共用體變量的引用共用體變量的引用不能整體引用共用體變量,只能引用變量中不能整體引用共用體變量,只能引用變量中的成員。的成員。a.i 表示為整型表示為整型a.ch 表示為字符型表示為字符型a.f 表示為符點型表示為符點型23共用體變量的特點共用體變量的特點1、共用體的空間在某一時刻只有一個成員在起作、共用體的空間在某一時刻只有一個成員在起作用。用。2、共用體變量中的成員是最后一次放入的成員。、共用體變量中的成員是最后一次放入的成員。3、共用體變量不能在定義時賦初值。、共用體變量不能在定義時賦初值。4、共用體變量不能作為函數(shù)

17、的參數(shù)或函數(shù)值,但、共用體變量不能作為函數(shù)的參數(shù)或函數(shù)值,但可使用指向共用體的指針變量??墒褂弥赶蚬灿皿w的指針變量。5、共用體可以作為結(jié)構(gòu)的成員,結(jié)構(gòu)體也可以作、共用體可以作為結(jié)構(gòu)的成員,結(jié)構(gòu)體也可以作為共用體的成員。為共用體的成員。24union un int i; double y;struct st char a10; union un b;coutsizeof(struct st)endl;1825union un short int a; char c2; w;w.c0=A; w.c1=a;coutoctw.aendl; 低字節(jié)低地址低字節(jié)低地址高字節(jié)高地址高字節(jié)高地址aAw.c1w.c02000H2001H輸出:輸出:0605010 1 1 0 0 0 0 1 0 1 0 0 0 0 0 1a65 ?56 ?652000H2001H26void main(void) union EXAMPLE struct int x, int y; in; int a,b; e; e.a=1; e.b=2; e.in.x=e.a*e.a; e.in.y=e.b+e.b; coute.in.xte.in.ysun)6、枚舉值可以

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論