




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1第七章第七章 結構體、共同體和枚舉類型結構體、共同體和枚舉類型 2定義:定義:將將不同種類型不同種類型的數據有序地的數據有序地組合在一起組合在一起,構,構造出一個造出一個新的數據類型新的數據類型,這種形式稱為,這種形式稱為結構結構體。體。結構體是多種類型組合的結構體是多種類型組合的數據類型數據類型。3struct 結構體名結構體名 成員列表成員列表 ;struct student int num; char name20; char sex; char addr30; ;結構體名結構體名關鍵字關鍵字不同數據不同數據類型組成類型組成的的成員成員分號不能少分號不能少4定義結構體類型變量的方法定義
2、結構體類型變量的方法一、先定義結構體類型再定義變量名一、先定義結構體類型再定義變量名struct student int num; char name20; char sex; int age; float score; char addr30;struct student student1, student2;結構體類型名結構體類型名變量變量1變量變量2結構體類型只是一種數據結構體類型只是一種數據類型,不占內存空間,只類型,不占內存空間,只有定義結構體類型有定義結構體類型變量變量時時才開辟內存空間。才開辟內存空間。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 結構體名結構體名 成員列表成
4、員列表 變量名列表;變量名列表; 緊接著定緊接著定義變量義變量7三、直接定義結構體類型變量三、直接定義結構體類型變量struct int num; char name20; char sex; int age; float score; char addr30; student1, student2;struct 成員列表成員列表 變量名列表;變量名列表; 不出現結構體名。不出現結構體名。82 2、在編譯時,僅對、在編譯時,僅對變量變量分配空間,不對分配空間,不對類型類型分配分配空間。空間。1 1、結構體類型的變量在內存、結構體類型的變量在內存依照其成員的順序依照其成員的順序順順序排列,所占內
5、存空間的大小是其全體成員所占空序排列,所占內存空間的大小是其全體成員所占空間的間的總和總和。3 3、對結構體中各個成員可以單獨引用、賦值,其、對結構體中各個成員可以單獨引用、賦值,其作用與變量等同。作用與變量等同。格式:格式:變量名變量名 . . 成員名成員名 student1 . numstudent1 . num94 4、結構體的成員可以是另一個結構體類型。、結構體的成員可以是另一個結構體類型。struct date int month; int day; int year; ;struct student int num; char name20; struct date birthda
6、y; ;成員類型成員類型成員名成員名5 5、成員名可以與程序中的變量名相同,二者分占不同的內、成員名可以與程序中的變量名相同,二者分占不同的內存單元,互不干擾。例如,在程序中仍可以定義變量存單元,互不干擾。例如,在程序中仍可以定義變量 intint num; num;10結構體類型變量的引用結構體類型變量的引用1 1、不能對結構體變量整體賦值或輸出,只能分別對、不能對結構體變量整體賦值或輸出,只能分別對各個成各個成員員引用。引用。cincinstudent1;student1;cincinstudent1.num; student1.num=100;student1.num; student1
7、.num=100;可以將一個結構體變量可以將一個結構體變量整體整體賦給另外一個相同類型的結構賦給另外一個相同類型的結構體變量。體變量。 student2=student1;student2=student1;2 2、嵌套的結構體變量必須逐層引用。、嵌套的結構體變量必須逐層引用。student1.student1.birthday.birthday.dayday=25;=25;3 3、結構體變量中的成員可以同一般變量一樣進行運算。、結構體變量中的成員可以同一般變量一樣進行運算。student1.birthday.day+; student1.score+=60;student1.birthday
8、.day+; student1.score+=60;錯誤錯誤必須用成員名引用必須用成員名引用11對局部變量類型的結構體變量初始化對局部變量類型的結構體變量初始化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關于結構類型變量的使用,說明以下幾點關于結構類型變量的使用,說明
9、以下幾點: :1 1、同類型的結構體變量之間可以直接賦值。這種、同類型的結構體變量之間可以直接賦值。這種賦值等同于各個成員的依次賦值。賦值等同于各個成員的依次賦值。 2 2、結構體變量不能直接進行輸入輸出,它的每一、結構體變量不能直接進行輸入輸出,它的每一個個成員成員能否直接進行輸入輸出,取決于其成員的類能否直接進行輸入輸出,取決于其成員的類型,若是基本類型或是字符數組,則可以直接輸入型,若是基本類型或是字符數組,則可以直接輸入輸出。輸出。3 3、結構體變量可以作為函數的參數,函數也可以、結構體變量可以作為函數的參數,函數也可以返回結構體的值。當函數的形參與實參為結構體類返回結構體的值。當函數
10、的形參與實參為結構體類型的變量時,這種結合方式屬于值調用方式,即屬型的變量時,這種結合方式屬于值調用方式,即屬于值傳遞。(舉例說明)于值傳遞。(舉例說明)13結構體數組結構體數組結構體數組中的結構體數組中的每個元素都是一個結構體類型的變每個元素都是一個結構體類型的變量量,其中包括該類型的各個成員。數組各元素在內,其中包括該類型的各個成員。數組各元素在內存中連續存放。存中連續存放。14一、結構體數組的定義一、結構體數組的定義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二、結構體數組的初始化二、結構體數組的初始化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以下程序的結果是:以下程序的結果是:void main(void) struct date int year, month, day; today; coutsizeof(struct date)endl; 1218根據下面的定義,能打印出字母根據下面的定義,能打印出字母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結構體類型的靜態成員 當把結構體類型中的某一個成員的存儲類型定義為靜態時,表示當把結構體類型中的某一個成員的存儲類型定義為靜態時,表示在這種結構類型的所有變量中,編譯程序為這個成員只分配一個在這種結構類型的所有變量中,編譯程序為這個成員只分配一個存儲空間,即這種結構體類型的所有變量共同使用這個成員的存存儲空間,即這種結構體類型的所有變量共同使用這個成員的
14、存儲空間儲空間。 :;其中類型要與在結構體中定義該成員的類型一致,結構體類型名其中類型要與在結構體中定義該成員的類型一致,結構體類型名指明靜態成員屬于哪一個結構體指明靜態成員屬于哪一個結構體。 struct sstatic int id;int eng;int s:id=50;這時,未定義結構體變量,這時,未定義結構體變量,但已將靜態成員的空間安但已將靜態成員的空間安排好排好。數據類型結構體類型若有定義:s s1,s2;則變量s1,s2的id成員占用同一存儲空間(靜態區)。20在結構體中說明的靜態成員屬于引用性說明,必須在文件作用域中的某一個地方對靜態的成員進行定義性說明,且僅能說明一次。in
15、t s:id; 說明id的初值為0(靜態變量的缺省初值均為靜態變量的缺省初值均為0) 21共用體共用體C+語言中,允許語言中,允許不同的數據類型使用不同的數據類型使用同一存儲區域同一存儲區域,即,即同一存儲區域由不同類型的變量共同表示。這種數據類型同一存儲區域由不同類型的變量共同表示。這種數據類型就是共用體。就是共用體。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、共用體變量不能作為函數
17、的參數或函數值,但、共用體變量不能作為函數的參數或函數值,但可使用指向共用體的指針變量。可使用指向共用體的指針變量。5、共用體可以作為結構的成員,結構體也可以作、共用體可以作為結構的成員,結構體也可以作為共用體的成員。為共用體的成員。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; 低字節低地址低字節低地址高字節高地址高字節高地址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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 院內低血糖的防治
- 湖南省長沙市2024屆高三數學下學期三模試題含答案
- 江蘇省泗洪縣2025年高中畢業生班階段性測試(三)語文試題含解析
- 上海電子信息職業技術學院《軟件項目管理》2023-2024學年第一學期期末試卷
- 天津市職業大學《中國民族樂器發展史》2023-2024學年第二學期期末試卷
- 山西運城農業職業技術學院《路橋檢測》2023-2024學年第一學期期末試卷
- 江蘇省如東縣2025年初三年級模擬考試數學試題含解析
- 南昌職業大學《家畜環境衛生學實驗》2023-2024學年第二學期期末試卷
- 錦州醫科大學醫療學院《電信專業英語》2023-2024學年第一學期期末試卷
- 江蘇省泰興市分界鎮初級中學2025年初三下學期3月物理試題試卷含解析
- 佛朗克變頻器用戶手冊
- 2024年中考英語真題-帶答案
- 2023年廣東省廣州市天河區中考一模英語試題(解析版)
- 包裝函范文英文函電(3篇)
- JTG-QB-003-2003公路橋涵標準圖鋼筋混凝土蓋板涵
- 2024年四川省成都市龍泉驛區中考數學二診試卷(含答案)
- MOOC 感測技術-武漢理工大學 中國大學慕課答案
- 2024年陜西新華出版傳媒集團新華書店分公司招聘筆試參考題庫含答案解析
- 鐵路機務知識培訓課件
- 人工智能在制造業中的應用2024年智能工廠的新范式
- (高清版)TDT 1037-2013 土地整治重大項目可行性研究報告編制規程
評論
0/150
提交評論