




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1第七章第七章 結(jié)構(gòu)體、共同體和枚舉類型結(jié)構(gòu)體、共同體和枚舉類型 2定義:定義:將將不同種類型不同種類型的數(shù)據(jù)有序地的數(shù)據(jù)有序地組合在一起組合在一起,構(gòu),構(gòu)造出一個(gè)造出一個(gè)新的數(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ù)類型組成類型組成的的成員成員分號(hào)不能少分號(hào)不能少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)體類型變量變量時(shí)時(shí)才開辟內(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 機(jī)械替換。機(jī)械替換。6二、在定義類型的同時(shí)定義變量二、在定義類型的同時(shí)定義變量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、在編譯時(shí),僅對(duì)、在編譯時(shí),僅對(duì)變量變量分配空間,不對(duì)分配空間,不對(duì)類型類型分配分配空間??臻g。1 1、結(jié)構(gòu)體類型的變量在內(nèi)存、結(jié)構(gòu)體類型的變量在內(nèi)存依照其成員的順序依照其成員的順序順順序排列,所占內(nèi)
5、存空間的大小是其全體成員所占空序排列,所占內(nèi)存空間的大小是其全體成員所占空間的間的總和總和。3 3、對(duì)結(jié)構(gòu)體中各個(gè)成員可以單獨(dú)引用、賦值,其、對(duì)結(jié)構(gòu)體中各個(gè)成員可以單獨(dú)引用、賦值,其作用與變量等同。作用與變量等同。格式:格式:變量名變量名 . . 成員名成員名 student1 . numstudent1 . num94 4、結(jié)構(gòu)體的成員可以是另一個(gè)結(jié)構(gòu)體類型。、結(jié)構(gòu)體的成員可以是另一個(gè)結(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、不能對(duì)結(jié)構(gòu)體變量整體賦值或輸出,只能分別對(duì)、不能對(duì)結(jié)構(gòu)體變量整體賦值或輸出,只能分別對(duì)各個(gè)成各個(gè)成員員引用。引用。cincinstudent1;student1;cincinstudent1.num; student1.num=100;student1.num; student1
7、.num=100;可以將一個(gè)結(jié)構(gòu)體變量可以將一個(gè)結(jié)構(gòu)體變量整體整體賦給另外一個(gè)相同類型的結(jié)構(gòu)賦給另外一個(gè)相同類型的結(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)體變量中的成員可以同一般變量一樣進(jìn)行運(yùn)算。、結(jié)構(gòu)體變量中的成員可以同一般變量一樣進(jìn)行運(yùn)算。student1.birthday.day+; student1.score+=60;student1.birthday
8、.day+; student1.score+=60;錯(cuò)誤錯(cuò)誤必須用成員名引用必須用成員名引用11對(duì)局部變量類型的結(jié)構(gòu)體變量初始化對(duì)局部變量類型的結(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對(duì)變量初始化,一一賦值對(duì)變量初始化,一一賦值12關(guān)于結(jié)構(gòu)類型變量的使用,說(shuō)明以下幾點(diǎn)關(guān)于結(jié)構(gòu)類型變量的使用,說(shuō)明
9、以下幾點(diǎn): :1 1、同類型的結(jié)構(gòu)體變量之間可以直接賦值。這種、同類型的結(jié)構(gòu)體變量之間可以直接賦值。這種賦值等同于各個(gè)成員的依次賦值。賦值等同于各個(gè)成員的依次賦值。 2 2、結(jié)構(gòu)體變量不能直接進(jìn)行輸入輸出,它的每一、結(jié)構(gòu)體變量不能直接進(jìn)行輸入輸出,它的每一個(gè)個(gè)成員成員能否直接進(jìn)行輸入輸出,取決于其成員的類能否直接進(jìn)行輸入輸出,取決于其成員的類型,若是基本類型或是字符數(shù)組,則可以直接輸入型,若是基本類型或是字符數(shù)組,則可以直接輸入輸出。輸出。3 3、結(jié)構(gòu)體變量可以作為函數(shù)的參數(shù),函數(shù)也可以、結(jié)構(gòu)體變量可以作為函數(shù)的參數(shù),函數(shù)也可以返回結(jié)構(gòu)體的值。當(dāng)函數(shù)的形參與實(shí)參為結(jié)構(gòu)體類返回結(jié)構(gòu)體的值。當(dāng)函數(shù)
10、的形參與實(shí)參為結(jié)構(gòu)體類型的變量時(shí),這種結(jié)合方式屬于值調(diào)用方式,即屬型的變量時(shí),這種結(jié)合方式屬于值調(diào)用方式,即屬于值傳遞。(舉例說(shuō)明)于值傳遞。(舉例說(shuō)明)13結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組中的結(jié)構(gòu)體數(shù)組中的每個(gè)元素都是一個(gè)結(jié)構(gòu)體類型的變每個(gè)元素都是一個(gè)結(jié)構(gòu)體類型的變量量,其中包括該類型的各個(gè)成員。數(shù)組各元素在內(nèi),其中包括該類型的各個(gè)成員。數(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的語(yǔ)句是:的語(yǔ)句是: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)成員 當(dāng)把結(jié)構(gòu)體類型中的某一個(gè)成員的存儲(chǔ)類型定義為靜態(tài)時(shí),表示當(dāng)把結(jié)構(gòu)體類型中的某一個(gè)成員的存儲(chǔ)類型定義為靜態(tài)時(shí),表示在這種結(jié)構(gòu)類型的所有變量中,編譯程序?yàn)檫@個(gè)成員只分配一個(gè)在這種結(jié)構(gòu)類型的所有變量中,編譯程序?yàn)檫@個(gè)成員只分配一個(gè)存儲(chǔ)空間,即這種結(jié)構(gòu)體類型的所有變量共同使用這個(gè)成員的存存儲(chǔ)空間,即這種結(jié)構(gòu)體類型的所有變量共同使用這個(gè)成員的
14、存儲(chǔ)空間儲(chǔ)空間。 :;其中類型要與在結(jié)構(gòu)體中定義該成員的類型一致,結(jié)構(gòu)體類型名其中類型要與在結(jié)構(gòu)體中定義該成員的類型一致,結(jié)構(gòu)體類型名指明靜態(tài)成員屬于哪一個(gè)結(jié)構(gòu)體指明靜態(tài)成員屬于哪一個(gè)結(jié)構(gòu)體。 struct sstatic int id;int eng;int s:id=50;這時(shí),未定義結(jié)構(gòu)體變量,這時(shí),未定義結(jié)構(gòu)體變量,但已將靜態(tài)成員的空間安但已將靜態(tài)成員的空間安排好排好。數(shù)據(jù)類型結(jié)構(gòu)體類型若有定義:s s1,s2;則變量s1,s2的id成員占用同一存儲(chǔ)空間(靜態(tài)區(qū))。20在結(jié)構(gòu)體中說(shuō)明的靜態(tài)成員屬于引用性說(shuō)明,必須在文件作用域中的某一個(gè)地方對(duì)靜態(tài)的成員進(jìn)行定義性說(shuō)明,且僅能說(shuō)明一次。in
15、t s:id; 說(shuō)明id的初值為0(靜態(tài)變量的缺省初值均為靜態(tài)變量的缺省初值均為0) 21共用體共用體C+語(yǔ)言中,允許語(yǔ)言中,允許不同的數(shù)據(jù)類型使用不同的數(shù)據(jù)類型使用同一存儲(chǔ)區(qū)域同一存儲(chǔ)區(qū)域,即,即同一存儲(chǔ)區(qū)域由不同類型的變量共同表示。這種數(shù)據(jù)類型同一存儲(chǔ)區(qū)域由不同類型的變量共同表示。這種數(shù)據(jù)類型就是共用體。就是共用體。union 共用體名共用體名 成員表列;成員表列; 變量表列;變量表列;union data int i; char ch; float f; a, b, c;union data a, b, c;這幾個(gè)成員在共用體變量中存放在同一地址,相互覆蓋,這幾個(gè)成員在共用體變量中存放在
16、同一地址,相互覆蓋,其長(zhǎng)度為最長(zhǎng)的成員的長(zhǎng)度其長(zhǎng)度為最長(zhǎng)的成員的長(zhǎng)度。22共用體變量的引用共用體變量的引用不能整體引用共用體變量,只能引用變量中不能整體引用共用體變量,只能引用變量中的成員。的成員。a.i 表示為整型表示為整型a.ch 表示為字符型表示為字符型a.f 表示為符點(diǎn)型表示為符點(diǎn)型23共用體變量的特點(diǎn)共用體變量的特點(diǎn)1、共用體的空間在某一時(shí)刻只有一個(gè)成員在起作、共用體的空間在某一時(shí)刻只有一個(gè)成員在起作用。用。2、共用體變量中的成員是最后一次放入的成員。、共用體變量中的成員是最后一次放入的成員。3、共用體變量不能在定義時(shí)賦初值。、共用體變量不能在定義時(shí)賦初值。4、共用體變量不能作為函數(shù)
17、的參數(shù)或函數(shù)值,但、共用體變量不能作為函數(shù)的參數(shù)或函數(shù)值,但可使用指向共用體的指針變量。可使用指向共用體的指針變量。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. 本站所有資源如無(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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年安徽省考公務(wù)員考試結(jié)構(gòu)化面試真題試題試卷答案解析
- 模具設(shè)計(jì)創(chuàng)新實(shí)例分析試題及答案
- (高清版)DB50∕T 808-2017 渝小吃 黃涼粉烹飪技術(shù)規(guī)范
- 游泳救生員職業(yè)資格考試面試的試題及答案準(zhǔn)備
- 模具設(shè)計(jì)師的認(rèn)證考試準(zhǔn)備試題及答案
- 智能農(nóng)田綜合管理項(xiàng)目可行性研究報(bào)告(參考)
- 2024籃球裁判員應(yīng)變能力試題及答案
- 模具設(shè)計(jì)師職業(yè)發(fā)展的重要性試題及答案
- 思維導(dǎo)圖式2024年籃球裁判員考試試題及答案
- 2024年種子繁育員的理論知識(shí)試題及答案
- 二年級(jí)下冊(cè)科學(xué)教案 第三單元1.《春夏秋冬》 大象版
- 低壓電工安全培訓(xùn)課件-
- Oracle ERP系統(tǒng)建設(shè)實(shí)施方案
- TSG-R0005-2022《移動(dòng)式壓力容器安全技術(shù)監(jiān)察規(guī)程》(2022版)
- 廣東省教育廳關(guān)于規(guī)范化城市幼兒園的辦園標(biāo)準(zhǔn)
- 【推薦】大華“智慧消防”物聯(lián)網(wǎng)綜合管理解決方案
- 分層總和法計(jì)算地基沉降excel
- 2020 ACLS-PC-SA課前自我測(cè)試試題及答案
- 2022年CASEAR2簡(jiǎn)易操作手冊(cè)
- 中國(guó)墓葬文化(專業(yè)應(yīng)用)
- 中醫(yī)方劑學(xué)歌訣大全(最全收藏版)
評(píng)論
0/150
提交評(píng)論