




已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第十二章 結(jié)構(gòu)體與共用體 問題 有時(shí)需要將不同類型的數(shù)據(jù)組合成一個(gè)有機(jī)的整體 以便于引用 如 一個(gè)學(xué)生有學(xué)號 姓名 性別 年齡 地址等屬性intnum charname 20 charsex intage intcharaddr 30 12 2結(jié)構(gòu)體的定義 結(jié)構(gòu)是一種構(gòu)造數(shù)據(jù)類型 結(jié)構(gòu) 是由若干個(gè)成員組成的 在使用之前必須先定義 然后才能用來定義相應(yīng)的結(jié)構(gòu)體變量 結(jié)構(gòu)體數(shù)組 結(jié)構(gòu)體指針變量 結(jié)構(gòu)體類型一般形式 struct結(jié)構(gòu)體名 成員列表 其中各成員都應(yīng)進(jìn)行類型說明 即類型名成員名 例 structstudent intnum charname 20 charsex intage floatscore charaddr 30 結(jié)構(gòu)體變量的定義 1 先聲明結(jié)構(gòu)類型 再定義結(jié)構(gòu)體變量例 structstudent intnum charname 20 floatscore structstudentstu1 stu2 結(jié)構(gòu)體變量的定義 2 在聲明結(jié)構(gòu)類型的同時(shí)定義結(jié)構(gòu)體變量例 structstudent intnum charname 20 floatscore stu1 stu2 結(jié)構(gòu)體變量的定義 3 直接定義結(jié)構(gòu)體類型變量例 struct intnum charname 20 floatscore stu1 stu2 結(jié)構(gòu)體變量的引用 一般對結(jié)構(gòu)體變量的使用 包括賦值 輸入 輸出 運(yùn)算等都是通過其成員來實(shí)現(xiàn)的 結(jié)構(gòu)體變量成員的表示方法 結(jié)構(gòu)體變量名 成員名例 stu1 num 學(xué)生1的學(xué)號 stu1 score 學(xué)生1的分?jǐn)?shù) 結(jié)構(gòu)體變量的初始化 和其他類型變量一樣 定義結(jié)構(gòu)體變量的同時(shí) 給它的成員賦初值 例 includevoidmain structstudent intnum charname 20 floatscore stu1 1301 ZhangSan 82 50 printf No d Name s Score f n stu1 num stu1 name stu1 score 結(jié)構(gòu)體變量的賦值 通過輸入語句或賦值語句 實(shí)現(xiàn)對結(jié)構(gòu)體變量的成員賦值 例 includevoidmain structstudent intnum charname 20 floatscore stu1 stu1 num 1301 stu1 name ZhangSan scanf f 嵌套的結(jié)構(gòu)體 一個(gè)結(jié)構(gòu)體的成員又是一個(gè)結(jié)構(gòu)體 例 structdatestructstudent intmonth intnum intday charname 20 intyear charsex intage structdatebirthday charaddr 30 12 3結(jié)構(gòu)體數(shù)組 結(jié)構(gòu)體數(shù)組的每一個(gè)元素都是具有相同結(jié)構(gòu)類型的結(jié)構(gòu)體變量 例 structstudent intnum charname 20 floatscore stu 3 其中 定義了一個(gè)結(jié)構(gòu)體數(shù)組stu 共有3個(gè)元素 每個(gè)元素都具有structstudent的結(jié)構(gòu)形式 結(jié)構(gòu)體數(shù)組的初始化賦值 例 structstudent intnum charname 20 floatscore stu 3 1301 ZhangSan 57 1302 LiSi 82 50 1303 WangWu 69 當(dāng)對全部元素進(jìn)行初始化賦值時(shí) 也可以不給出長度 12 4結(jié)構(gòu)體指針變量 12 4 1指向結(jié)構(gòu)體變量的指針 一般形式為 struct結(jié)構(gòu)名 結(jié)構(gòu)體指針變量名 例 structstudent intnum charname 20 floatscore structstudent pstu 其中定義了一個(gè)指向student的指針變量pstu 12 4 1指向結(jié)構(gòu)體變量的指針變量 用結(jié)構(gòu)體指針變量 訪問結(jié)構(gòu)體變量的各個(gè)成員 一般形式為 結(jié)構(gòu)體指針變量 成員名 或結(jié)構(gòu)體指針變量 成員名 例 pstu num或pstu num 例 includevoidmain structstudent intnum charname 20 floatscore stu1 1301 ZhangSan 82 50 pstu pstu 12 4 2指向結(jié)構(gòu)體數(shù)組的指針變量 結(jié)構(gòu)體指針變量可指向一個(gè)結(jié)構(gòu)體數(shù)組 其指針變量的值是整個(gè)結(jié)構(gòu)體數(shù)組的首地址 例 設(shè)ps為指向結(jié)構(gòu)體數(shù)組的指針變量 則ps指向該結(jié)構(gòu)體數(shù)組的0號元素 ps 1指向該結(jié)構(gòu)體數(shù)組的1號元素 例 includevoidmain structstudent intnum charname 20 floatscore stu 3 1301 ZhangSan 57 1302 LiSi 82 50 1303 WangWu 69 structstudent ps stu ps printf No d Name s Score f n ps num ps name ps score 12 5向函數(shù)傳遞結(jié)構(gòu)體 3種方式 1 用結(jié)構(gòu)體的單個(gè)成員作為函數(shù)參數(shù) 向函數(shù)傳遞結(jié)構(gòu)體的單個(gè)成員 這與普通類型的變量作函數(shù)參數(shù)沒什么區(qū)別 都是傳值調(diào)用 在函數(shù)內(nèi)部對其進(jìn)行操作 不會引起實(shí)參結(jié)構(gòu)體成員值的變化 2 用結(jié)構(gòu)體變量作為函數(shù)參數(shù) 向函數(shù)傳遞結(jié)構(gòu)體的完整結(jié)構(gòu) 這種傳遞 是將整個(gè)結(jié)構(gòu)體成員的內(nèi)容復(fù)制給被調(diào)函數(shù) 這種方式是傳值調(diào)用 在函數(shù)內(nèi)部對其進(jìn)行操作 不會引起實(shí)參結(jié)構(gòu)體成員值的變化 3 用結(jié)構(gòu)體指針或結(jié)構(gòu)體數(shù)組作為函數(shù)參數(shù) 向函數(shù)傳遞結(jié)構(gòu)體的地址 由于是傳地址調(diào)用 在函數(shù)內(nèi)部對其進(jìn)行操作 將影響實(shí)參結(jié)構(gòu)體成員值的變化 12 6共用體 共用體 也稱為聯(lián)合 也是一種構(gòu)造的數(shù)據(jù)類型 共用體是將不同類型的數(shù)據(jù)組織在一起共同占用同一段內(nèi)存的一種構(gòu)造數(shù)據(jù)類型 例如 在校學(xué)生和教師都填寫以下表格 姓名年齡職業(yè)單位其中 職業(yè)分兩類 教師和學(xué)生 而單位一欄里 學(xué)生填寫班級編號 整型類型 教師填寫某系某教研室 整型類型 共用體的定義 共用體與結(jié)構(gòu)體的類型聲明方法類似 共用體的關(guān)鍵字為union 一般形式 union共用體名 成員列表 其中各成員都應(yīng)進(jìn)行類型說明 即類型名成員名 uniondepartment intclass charoffice 20 共用體變量的說明 3種形式 1 uniondepartment先定義再說明 intclass charoffice 20 uniondepartmenta b 2 uniondepartment定義同時(shí)說明 intclass charoffice 20 a b 3 union直接說明 intclass charoffice 20 a b 共用體與結(jié)構(gòu)體的區(qū)別 1 結(jié)構(gòu)體變量所占內(nèi)存長度是各成員占的內(nèi)存長度之和 每個(gè)成員分別占有自己的內(nèi)存單元 2 共用體變量所占內(nèi)存長度是最長的成員的長度 即共用體變量的地址和它的各成員的地址是同一地址 共用體變量的引用 對共用體變量的使用 包括賦值 使用只能是對變量的成員進(jìn)行 共用體變量成員的表示方法 共用體變量名 成員名例 a classa office不允許對共用體變量作初始化賦值 賦值只能在程序中進(jìn)行 include definePN3voidmain struct charname 10 intage charjob union intclass charoffice 10 units body PN 例 設(shè)有一個(gè)教師和學(xué)生通用的表格 有姓名 年齡 職業(yè) 單位4項(xiàng) 在職業(yè)項(xiàng)中 用 s 表示學(xué)生 用 t 表示教師 編程輸入人員數(shù)據(jù) 再以表格輸出 intn i for i 0 i PN i printf inputname age jobanddepartment n scanf s d c body i name printf name tage tjob tclass office n for i 0 i PN i if body i job s printf s t d t 3c t d n body i name body i age body i job body i units class elseprintf s t d t 3c t s n body i name body i age body i job body i units office 12 7枚舉數(shù)據(jù)類型 當(dāng)某些變量僅由有限個(gè)數(shù)據(jù)值組成時(shí) 通常用枚舉類型來表示 所謂枚舉是指將變量的值一一列舉出來 變量的值只限于列舉出來的值的范圍內(nèi) 如一周只有7天 一年只有12個(gè)月等等 注意 枚舉類型是一種基本數(shù)據(jù)類型 而不是一種構(gòu)造類型 關(guān)鍵字為enum 一般形式 enum枚舉名 枚舉值表 在枚舉值表中應(yīng)羅列出所有可用值 這些值稱之為枚舉元素 例 enumweekday sun mon tue wed thu fri sat 聲明了一個(gè)枚舉類型enumweekday 可以用此類型來定義變量 該變量只能取7天中的某一天 枚舉變量的說明 3種形式 1 enumweekday先定義再說明 sun mon tue wed thu fri sat enumweekdaya b c 2 enumweekday定義同時(shí)說明 sun mon tue wed thu fri sat a b c 3 enum直接說明 sun mon tue wed thu fri sat a b c 枚舉變量的賦值和使用 1 在C編譯中 對枚舉元素按常量處理 故稱枚舉常量 它們不是變量 不能對它們賦值 例 sun 5 mon 2 sun mon 是錯(cuò)誤的 枚舉變量的賦值和使用 2 枚舉元素本身由系統(tǒng)定義為有序號的數(shù)值 從0開始順序定義為0 1 2 例如在weekday中 sun值為0 mon值為1 sat值為6 這個(gè)序號值是可以輸出的 例 includevoidmain enumweekday sun mon tue wed thu fri sat a b c a sun b mon c tue printf d d d a b c 運(yùn)行結(jié)果 0 1 2 枚舉變量的賦值和使用 3 只能把枚舉值賦予枚舉變量 不能把元素的數(shù)值直接賦予枚舉變量 例 a sun b mon 是正確的 a 0 b 1 是錯(cuò)誤的 如果一定要把數(shù)值賦予枚舉變量 則必須用強(qiáng)制類型轉(zhuǎn)換 則應(yīng)b enumweekday 1 其意義是將順序號為1的枚舉元素賦予枚舉變量b 等價(jià)于b mon 4 枚舉元素不是字符常量 也不是字符串常量 使用時(shí)無須加單 雙引號 用typedef定義數(shù)據(jù)類型 C語言允許用戶用typedef來自定義類型說明符 例 typedefintINTEDER 指定用INTEDER來代表int類型 因此 INTEDERa b 等價(jià)于inta b typedef定義的一般形式為 typedef原類型名新類型名 用typedef定義數(shù)據(jù)類型 例 typedefcharNAME 20 其中 NAME是字符數(shù)組類型 長度為20 然后可以用NAME說明變量 NAMEs1 s2 等價(jià)于chars1 20 s2 20 用typedef定義數(shù)據(jù)類型 例 typedefstructstudent intnum ycharname 20 floatscore STU STU表示structstudent的結(jié)構(gòu)類型 然后可以用STU來說明結(jié)構(gòu)變量 STUstu1 stu2 12 8動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu) 單向鏈表 一 問題1 用數(shù)組的方式存儲學(xué)生的數(shù)據(jù) 需要預(yù)先確定學(xué)生的人數(shù) 并且數(shù)組占用的是一塊連續(xù)的內(nèi)存區(qū)域 2 用動(dòng)態(tài)存儲的方法 每次分配一塊空間存放一個(gè)學(xué)生的數(shù)據(jù) 稱之為一個(gè)結(jié)點(diǎn) 有多少學(xué)生就申請分配多少塊空間 也就建立多少個(gè)結(jié)點(diǎn) 當(dāng)學(xué)生留級 退學(xué)后 可刪除該結(jié)點(diǎn) 并釋放該結(jié)點(diǎn)占用的空間 使用動(dòng)態(tài)分配 每個(gè)結(jié)點(diǎn)之間的內(nèi)存空間可以是不連續(xù)的 結(jié)點(diǎn)內(nèi)是連續(xù)的 結(jié)點(diǎn)之間的聯(lián)系可以用指針實(shí)現(xiàn) 二 鏈表的定義用一個(gè)指針變量head指向第1個(gè)結(jié)點(diǎn)的首地址 以后每個(gè)結(jié)點(diǎn)都分為兩個(gè)域 一個(gè)是數(shù)據(jù)域 存放各種實(shí)際的數(shù)據(jù) 另一個(gè)域是指針域 存放下一個(gè)結(jié)點(diǎn)的首地址 最后一個(gè)結(jié)點(diǎn)因無后續(xù)結(jié)點(diǎn)連接 其指針域可賦予NULL 這種連接方式 在數(shù)據(jù)結(jié)構(gòu)中稱為鏈表 鏈表中每一個(gè)結(jié)點(diǎn)都是同一種結(jié)構(gòu)類型 例 一個(gè)存放學(xué)生的學(xué)號和成績的結(jié)點(diǎn)為 structstudent1 intnum floatscore structstudent1 next 前兩個(gè)成員項(xiàng)組成數(shù)據(jù)域 后一個(gè)成員項(xiàng)next構(gòu)成指針域 它是一個(gè)指向同類型結(jié)構(gòu)的指針變量 include defineNULL0structstudent longnum floatscore structstudent next voidmain structstudenta b c head p a num 00101 a score 89 5 b num 00103 b score 90 c num 00107 c score 85 例 建立一個(gè)簡單鏈表 由3個(gè)學(xué)生數(shù)據(jù)的結(jié)點(diǎn)組成 輸出各結(jié)點(diǎn)中的數(shù)據(jù) head 三 單向鏈表的建立可以采取向鏈表中添加結(jié)點(diǎn)的方式來建立一個(gè)單向鏈表 為了向鏈表中添加一個(gè)新結(jié)點(diǎn) 首先要為新建結(jié)點(diǎn)動(dòng)態(tài)申請內(nèi)存空間 讓指針變量p指向這個(gè)新建結(jié)點(diǎn) 然后將新建結(jié)點(diǎn)添加到
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 技術(shù)員計(jì)算機(jī)考試全真試題及答案
- 高考數(shù)學(xué)知識技能對比研究試題及答案
- 企業(yè)戰(zhàn)略實(shí)施的關(guān)鍵技能試題及答案
- 軟件技術(shù)員考試成敗關(guān)鍵解讀試題及答案
- 行政法學(xué)多元化視野試題及答案
- 企業(yè)財(cái)務(wù)戰(zhàn)略與其風(fēng)險(xiǎn)管理架構(gòu)試題及答案
- 多元化經(jīng)營的實(shí)施方案計(jì)劃
- VB考試必背知識點(diǎn)的試題及答案
- 湖南省2025年第一次集中招聘考試筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 社團(tuán)交流活動(dòng)的組織計(jì)劃
- 2025年建筑模板制品行業(yè)深度研究報(bào)告
- 湖北省荊門市2025年七年級下學(xué)期語文期末考試試卷及答案
- 2025-2030年中國葉黃素行業(yè)市場發(fā)展現(xiàn)狀及競爭格局與投資發(fā)展研究報(bào)告
- 2024第41屆全國中學(xué)生物理競賽預(yù)賽試題(含答案)
- 內(nèi)鏡洗消相關(guān)試題及答案
- 高效節(jié)能泵結(jié)構(gòu)優(yōu)化-全面剖析
- 2024-2025湘科版小學(xué)科學(xué)四年級下冊期末考試卷及答案(三套)
- 中國企業(yè)科創(chuàng)力研究報(bào)告2024
- 細(xì)胞培養(yǎng)技術(shù)的基礎(chǔ)試題及答案
- (廣東二模)2025年廣東省高三高考模擬測試(二)歷史試卷(含答案)
- GB/T 14601-2025電子特氣氨
評論
0/150
提交評論