版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、結(jié)構(gòu)體,共用體和枚舉類型,ma6174,我們現(xiàn)在學(xué)過些數(shù)據(jù)類型?,bool char int short long float double 數(shù)組,用這些數(shù)據(jù)類型可以做什么?,在我們的實(shí)際生活中,不僅僅要是用計(jì)算機(jī)處理文字和列表,世界很復(fù)雜,計(jì)算機(jī)的功能在增強(qiáng),因此編程語言不僅要能處理數(shù)和名字,還要能表示生活中的東西,比如樹,書本,人,星球,宇宙 用我們學(xué)的數(shù)據(jù)類型能表示嗎?,問題描述:,存儲(chǔ)ACM集訓(xùn)隊(duì)中隊(duì)員的信息: 包括:姓名、性別,學(xué)號(hào)、手機(jī)號(hào)、出生年月、期末成績(jī),做題數(shù) 如果要存儲(chǔ)所有隊(duì)員的信息,如何實(shí)現(xiàn)?,方案一:數(shù)組,姓名數(shù)組:name100,學(xué)號(hào)數(shù)組:num100,做題數(shù)目數(shù)組:
2、solved100,不能建立數(shù)組間的關(guān)系,數(shù)據(jù)孤立,處理不方便,方案二:多維數(shù)組,C語言不允許數(shù)組中存在多種數(shù)據(jù)類型,方案三:使用結(jié)構(gòu)體,自己定義一種數(shù)據(jù)類型,比如acmer類,這個(gè)數(shù)據(jù)類型包括集訓(xùn)隊(duì)員的基本信息,用這個(gè)數(shù)據(jù)類型去定義每個(gè)隊(duì)員。 例如: struct acmer char name30; char num15; int solved; double score; ;,定義及用途,結(jié)構(gòu)體(structure)是用戶根據(jù)需要自定義的一種復(fù)合數(shù)據(jù)類型,包含若干個(gè)類型不同的數(shù)據(jù)項(xiàng)。 用途: 1.表示以前不能表示的物體 2.將多種信息匯聚到一起,方便處理 3.以后深入學(xué)習(xí)其他知識(shí)的基礎(chǔ)。
3、如鏈表,樹,圖,C+中的類 4.編程中的其他應(yīng)用:如返回值,如何定義結(jié)構(gòu)體?,struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名1; 類型標(biāo)識(shí)符 成員名2; ;,struct是關(guān)鍵字,不能省略,合法標(biāo)識(shí)符 可省略:無名結(jié)構(gòu)體,成員類型可以是基本類型或構(gòu)造類型,必須有分號(hào),struct date int year; int month; int day; ;,struct acmer char name20; char num15 char sex; Int solved; char addr30; struct date birthday; ;,日期結(jié)構(gòu)體類型:由年、月、日三項(xiàng)組成,結(jié)構(gòu)體變量的定義,
4、1.先定義結(jié)構(gòu)體再定義結(jié)構(gòu)體變量 2.在定義結(jié)構(gòu)體的同時(shí)定義結(jié)構(gòu)體變量 3.直接定義結(jié)構(gòu)體變量,注意事項(xiàng),1.結(jié)構(gòu)定義并不預(yù)留內(nèi)存,結(jié)構(gòu)體變量的定義才引起存儲(chǔ)分配。 2.結(jié)構(gòu)體成員的數(shù)據(jù)類型可以是C語言的基本數(shù)據(jù)類型,也可以是數(shù)組和指針類型。還可以是自定義類型 3.結(jié)構(gòu)定義僅描述了一個(gè)結(jié)構(gòu)的形式。如果要在程序里使用結(jié)構(gòu),需要聲明結(jié)構(gòu)變量。,結(jié)構(gòu)體變量所占的存儲(chǔ)空間,教材206頁: “結(jié)構(gòu)體變量占用的空間是長(zhǎng)度是其全部成員占用的內(nèi)存空間長(zhǎng)度的總和” struct data int a; double b; num; num占多大內(nèi)存空間?,國內(nèi)很多教科書都是這樣寫,其實(shí)這是一個(gè)嚴(yán)重錯(cuò)誤正確的分配
5、方法是這樣的:結(jié)構(gòu)體內(nèi)的成員空間以最大的結(jié)構(gòu)體中數(shù)據(jù)類型開辟元空間,若超過此數(shù)據(jù)類型,則再開辟一個(gè)此數(shù)據(jù)類型,若此數(shù)據(jù)類型空間剩余,則由下一個(gè)成員空間補(bǔ)充(結(jié)構(gòu)體嵌套也是一樣的規(guī)則),結(jié)構(gòu)體類型變量的引用,結(jié)構(gòu)體變量的引用原則 結(jié)構(gòu)體變量不能整體輸入輸出,要通過成員運(yùn)算符“.”,逐個(gè)訪問其成員,且訪問的格式為: 結(jié)構(gòu)體變量.成員,struct date int year; int month; int day; ; struct date birth;,printf(%d,%d,%d,birth); printf(%d,%d,%d,birth.year, birth.month,birth.d
6、ay);,“.”是成員運(yùn)算符,優(yōu)先級(jí)最高,如果某成員本身又是一個(gè)結(jié)構(gòu)類型,則只能通過多級(jí)的分量運(yùn)算,對(duì)最低一級(jí)的成員進(jìn)行引用。 結(jié)構(gòu)變量.成員.子成員.最低級(jí)子成員,引用結(jié)構(gòu)變量student中的birthday成員的格式分別為: student.birthday.year student.birthday.month student.birthday.day,結(jié)構(gòu)體變量的引用原則,struct acmer int num ; char name20; char sex; float score; struct date birthday; student;,struct date int y
7、ear; int month; int day; ;,對(duì)最低一級(jí)成員,可像同類型的普通變量一樣,進(jìn)行相應(yīng)的各種運(yùn)算、賦值、輸入、輸出。,結(jié)構(gòu)體變量的初始化,一般形式 結(jié)構(gòu)體類型名 結(jié)構(gòu)體變量=初值表; 說明 若某成員本身又是結(jié)構(gòu)體類型,則該成員的初值為一個(gè)初值表 初值的數(shù)據(jù)類型,應(yīng)與結(jié)構(gòu)變量中相應(yīng)成員的類型一致,struct acmer int num ; char name20; char sex; float score; struct date birthday; ; struct acmer student=102, Zhangsan, M, 85, 1980,9,20 ;,結(jié)構(gòu)體數(shù)組
8、,定義:結(jié)構(gòu)數(shù)組的每一個(gè)元素,都是結(jié)構(gòu)類型數(shù)據(jù),均包含結(jié)構(gòu)類型的所有成員。,struct student int num ; char name20; char sex; int age; float score; ; struct student stu3 ;,stu0 stu1 stu2,結(jié)構(gòu)體數(shù)組初始化: 結(jié)構(gòu)體類型名 結(jié)構(gòu)體數(shù)組名n初值表1,初值表2, .,初值表n;,struct student int num ; char name20; char sex; int age; float score; ; struct student stu3 101,Lilin,M,18,87.
9、5, 102,Zhanghua,M,18,99, 103,Wuli,F,19,78.5;,結(jié)構(gòu)體類型指針,結(jié)構(gòu)體變量在內(nèi)存中的起始地址稱為結(jié)構(gòu)體變量的指針。 指針的用途是非常廣泛的,指針變量可以指向基本數(shù)據(jù)類型的變量和數(shù)組,也同樣可以指向結(jié)構(gòu)體類型的存儲(chǔ)單元。 定義指向結(jié)構(gòu)體的指針變量的語法是: struct 結(jié)構(gòu)體名 *結(jié)構(gòu)體指針變量名;,引用結(jié)構(gòu)體變量成員的三種形式:,結(jié)構(gòu)體變量.成員名 stu.num (*p).成員名 (*p).num p-成員名 p-num,若struct student stu; struct student *p= char name20; char sex; i
10、nt age; ; struct student stu3101,Lilin,M,18, 102,Zhanghua,M,18, 103,Wuli,F,19, ; struct student *p=stu; main() for( ; pnum,p-name,p-sex); ,說明: 如果指針變量p指向結(jié)構(gòu)體數(shù)組,則p+1指向結(jié)構(gòu)體數(shù)組的下一個(gè)元素,而不是當(dāng)前元素的下一個(gè)成員。 如果指針變量p指向一個(gè)結(jié)構(gòu)變量(或結(jié)構(gòu)數(shù)組),就不能再使之指向結(jié)構(gòu)體變量(或結(jié)構(gòu)數(shù)組元素)的某一成員。,用結(jié)構(gòu)體變量和指向結(jié)構(gòu)體的指針作函數(shù)參數(shù),用結(jié)構(gòu)體類型數(shù)據(jù)作為函數(shù)參數(shù)有以下三種形式: 用結(jié)構(gòu)體變量的成員作參數(shù)
11、用法與普通變量作參數(shù)相同,值傳遞 用結(jié)構(gòu)體變量作參數(shù) 函數(shù)的實(shí)參和形參必須都是結(jié)構(gòu)體變量,程序效率低,不主張用 用指向結(jié)構(gòu)體變量的指針作參數(shù) 提高運(yùn)行效率,共用體(聯(lián)合體),概念: 使幾個(gè)不同的變量占有同一段內(nèi)存空間的結(jié)構(gòu)稱為共用體 共用體類型的定義 -與結(jié)構(gòu)體類型的定義類似,union 共用體類型名 類型標(biāo)識(shí)符 成員名1; 類型標(biāo)識(shí)符 成員名2; ;,union category int class; char position10; ;,共用體變量的定義-與結(jié)構(gòu)體變量的定義類似,間接定義法: 先定義共用體類型,后定義共用體變量,union data int i; char ch; floa
12、t f; ; union data un1,un2,un3;,直接定義法: 在定義共用體類型的同時(shí),定義共用體變量,union data int i; char ch; float f; un1,un2,un3;,注意:共用變量占用的內(nèi)存空間,等于最長(zhǎng)成員的長(zhǎng)度,而不是各成員長(zhǎng)度之和。,共用體變量的引用 與結(jié)構(gòu)體變量的引用一樣,也只能逐個(gè)引用共用體變量的成員 特點(diǎn) (1)系統(tǒng)采用覆蓋技術(shù),實(shí)現(xiàn)共用變量各成員的內(nèi)存共享,所以在某一時(shí)刻,最后一次存入的成員值是起作用的。 例如,執(zhí)行un1.i=1; un1.ch=c; un1.f=3.14后,un1.f才是有效的成員。 (2)由于所有成員共享同一內(nèi)
13、存空間,故共用變量與其各成員的地址相同。 例如,un1=un1.i=un1.ch=un1.f。 (3)不能對(duì)共用體變量進(jìn)行初始化(注意:結(jié)構(gòu)體變量可以);也不能將共用變量作為函數(shù)參數(shù),以及使函數(shù)返回一個(gè)共用體數(shù)據(jù),但可以使用指向共用變量的指針。 (4)共用類型可以出現(xiàn)在結(jié)構(gòu)類型定義中,反之亦然。,結(jié)構(gòu)體與共用體 區(qū)別: 存儲(chǔ)方式不同,聯(lián)系: 兩者可相互嵌套,枚舉類型,用途: 在實(shí)際應(yīng)用中,有些變量的取值范圍是有限的,僅可能只有幾個(gè)值,如一個(gè)星期7天,一年12個(gè)月,一副撲克有4種花色,每一花色有13張牌等等。此時(shí)用整型數(shù)來表示這些變量的取值,其直觀性很差,如在程序中使用1,對(duì)于非編稱者來說,它是
14、代表星期一呢?還是一月份?很難區(qū)分。若在程序中使用“Mon”,則不會(huì)有人認(rèn)為是代表一月份。由此看出,為提高程序的可讀性,引入非數(shù)值量,即一些有意義的符號(hào)是非常必要的。,枚舉類型的定義 enum 枚舉類型名取值表; 例:enum weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat; 枚舉變量的定義-與結(jié)構(gòu)體變量定義類似 間接定義:enum weekdays work; 直接定義:enum weekdays Sun,Mon,Tue,Wed,Thu,Fri,Sat work;,說明: (1)枚舉型僅適應(yīng)于取值有限的數(shù)據(jù)。 例:1周天,年個(gè)月。 (2)取值表中的值稱為枚舉元素,其
15、含義由程序解釋。 例:不是因?yàn)閷懗伞癝un”就自動(dòng)代表“星期天”。事實(shí)上, 枚舉元素用什么表示都可以。 (3)枚舉元素按常量處理,它們的值是定義時(shí)的順序號(hào)(從開始),所以枚舉元素可以進(jìn)行比較,比較規(guī)則是:序號(hào)大者為大! 例:上例中的Sun的值為0、Mon的值為1、Sat的值為6,所以MonSun,Sat最大。 (4)枚舉元素的值也是可以人為改變的:在定義時(shí)由程序指定。 例:如果enum weekdays Sun=, Mon ,Tue, Wed, Thu, Fri, Sat;則Sun=,Mon=,從Tue=2開始,依次增。 注意:不同的枚舉元素不可以指定相同的值 (5)一個(gè)整數(shù)不能直接賦值給枚舉
16、變量 例:workday2;(非法,因?yàn)轭愋筒煌?改寫成:workday(enum weekday)2;,10.10 用typedef定義類型,作用:用typedef定義已有類型的別名。該別名與標(biāo)準(zhǔn)類型名一樣,可用來定義相應(yīng)的變量。 定義已有類型別名的方法 (1)按定義變量的方法,寫出定義體;(2)將變量名換成別名;(3)在定義體最前面加上typedef。,關(guān)鍵字,例:給結(jié)構(gòu)類型struct date定義1個(gè)別名DATE。 struct date int year, month, day; ; (1)按定義結(jié)構(gòu)變量的方法,寫出定義體:struct date d; (2)將變量名換成別名: struct date DATE; (3)在定義體最前面加上typedef: typedef struct date DATE;,例: typedef int status; status write() return 0; ,注意:,1.typedef可以聲明各種類型名,不能用來定義變量 2.typedef只是對(duì)已經(jīng)存在
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026上半年貴州事業(yè)單位聯(lián)考文化旅游職業(yè)學(xué)院招聘14人考試參考題庫及答案解析
- 2026中國雅江集團(tuán)社會(huì)招聘筆試備考題庫及答案解析
- 2026山西離柳焦煤集團(tuán)有限公司專業(yè)技術(shù)人員招聘柳林縣凌志售電有限公司專業(yè)技術(shù)人員4人筆試備考題庫及答案解析
- 2026年現(xiàn)金流管理優(yōu)化培訓(xùn)
- 九江富和建設(shè)投資集團(tuán)有限公司2026年第一批招聘工作人員【12人】筆試參考題庫及答案解析
- 2026湖北十堰市市屬國有企業(yè)招聘第一批40人考試參考題庫及答案解析
- 2026湖北武漢大學(xué)人民醫(yī)院科研助理招聘7人筆試備考題庫及答案解析
- 2026年金融反洗錢合規(guī)操作流程
- 2026年排水系統(tǒng)中的流體流動(dòng)特性
- 2025年四川日?qǐng)?bào)筆試及答案
- GB 4053.3-2025固定式金屬梯及平臺(tái)安全要求第3部分:工業(yè)防護(hù)欄桿及平臺(tái)
- 2026中央廣播電視總臺(tái)招聘124人參考筆試題庫及答案解析
- JG/T 3030-1995建筑裝飾用不銹鋼焊接管材
- 流程與TOC改善案例
- 【當(dāng)代中國婚禮空間設(shè)計(jì)研究4200字(論文)】
- GB/T 20322-2023石油及天然氣工業(yè)往復(fù)壓縮機(jī)
- 中國重汽車輛識(shí)別代號(hào)(VIN)編制規(guī)則
- 項(xiàng)目管理學(xué)課件戚安邦全
- 羽毛球二級(jí)裁判員試卷
- 通風(fēng)與空調(diào)監(jiān)理實(shí)施細(xì)則abc
- JJF 1614-2017抗生素效價(jià)測(cè)定儀校準(zhǔn)規(guī)范
評(píng)論
0/150
提交評(píng)論