




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第7章結(jié)構(gòu)體和共用體
在學(xué)生登記表中,要描述一個學(xué)生的基本情況,就需要記錄他的學(xué)號、姓名、年齡、性別、成績、家庭住址等信息,如圖7-1所示。這些信息的特點(diǎn)是數(shù)據(jù)類型各不相同,但是都與同一個實(shí)體相關(guān)聯(lián)。
學(xué)號
(長整型)姓名
(字符串)年齡
(整型)性別
(字符型)成績
(長整型)家庭住址
(字符串)圖7-1
學(xué)生基本情況7.2結(jié)構(gòu)體與結(jié)構(gòu)體類型變量
“結(jié)構(gòu)體”是一種構(gòu)造類型,是數(shù)目固定、類型相同或不同的若干有序變量組成的集合。組成結(jié)構(gòu)體的每個數(shù)據(jù)稱為結(jié)構(gòu)體的“成員”。7.2.1結(jié)構(gòu)體類型的聲明struct結(jié)構(gòu)體名{成員列表};structstudent{unsignedintnum;charname[20];charsex;intage;floatscore;charaddr[40];};/*分號不能少*/
7.2.1結(jié)構(gòu)體類型的聲明說明:(1)sturct是關(guān)鍵字,是結(jié)構(gòu)體類型必不可少的標(biāo)識符。(2)結(jié)構(gòu)體的名字是用戶自己定義的標(biāo)識符,與變量命名規(guī)則相同。(3)大括號“{}”中是組成該結(jié)構(gòu)體的數(shù)據(jù)項,或稱為結(jié)構(gòu)體類型中的成員。(4)結(jié)構(gòu)體成員的數(shù)據(jù)類型可以是簡單類型、數(shù)組、指針或已經(jīng)定義過的結(jié)構(gòu)體等。(5)整個定義以分號結(jié)束。7.2.2結(jié)構(gòu)體類型變量的定義定義方法有以下三種:(1)先聲明結(jié)構(gòu)體類型再定義結(jié)構(gòu)體變量。structstudent{unsignedintnum;charname[20];charsex;intage;floatscore;charaddr[40];};structstudentstu1,stu2;
/*struct不能少*/7.2.2結(jié)構(gòu)體類型變量的定義(2)在定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量。structstudent{unsignedintnum;charname[20];charsex;intage;floatscore;charaddr[40];}stu1,stu2;定義說明的一般形式為:struct結(jié)構(gòu)名{
結(jié)構(gòu)體成員表列}變量名表列;7.2.2結(jié)構(gòu)體類型變量的定義(3)直接定義結(jié)構(gòu)體類型變量,不出現(xiàn)結(jié)構(gòu)體名。struct{unsignedintnum;charname[20];charsex;intage;floatscore;charaddr[40];}stu1,stu2;定義說明的一般形式為:struct{
結(jié)構(gòu)體成員表列}變量名表列;/*注意這里沒有類型名*/7.2.2結(jié)構(gòu)體類型變量的定義說明:1)結(jié)構(gòu)體類型與結(jié)構(gòu)體變量的概念。只能對變量進(jìn)行操作(賦值、存取或運(yùn)算),而不能對一個結(jié)構(gòu)體類型進(jìn)行操作。2)對結(jié)構(gòu)體中的成員可以單獨(dú)使用,它的作用與地位相當(dāng)于普通變量。3)結(jié)構(gòu)體的成員也可以是一個結(jié)構(gòu)體變量,從而構(gòu)成嵌套結(jié)構(gòu)。4)結(jié)構(gòu)體中的成員名可以與程序中的變量名相同,但二者代表不同的對象。
7.2.3結(jié)構(gòu)體變量的初始化對結(jié)構(gòu)體變量可以在定義時初始化。structstudentstu1={20080512,"WenChuan",'m',18,89.5,"SiChuan"};7.2.4結(jié)構(gòu)體類型變量的引用
1.結(jié)構(gòu)體類型變量的引用格式:2.結(jié)構(gòu)體變量的引用規(guī)則:(1)不能將結(jié)構(gòu)體變量作為一個整體進(jìn)行輸入和輸出。printf("%d,%s,%c,%d,%f,%s\n",stu1.num,,stu1.sex, stu1.age,stu1.score,stu1.addr);結(jié)構(gòu)體變量名.成員名(2)結(jié)構(gòu)體變量中各成員的使用方法與普通的簡單類型變量完全相同。
stu1.num=20080512="BeiChuan"stu1.age=18;stu1.score=stu2.scoresum=stu1.score+stu2.scorestu1.num++;7.3結(jié)構(gòu)體數(shù)組
1.結(jié)構(gòu)體數(shù)組的定義
結(jié)構(gòu)體數(shù)組的定義方法和結(jié)構(gòu)體類型變量類似,只需說明它為數(shù)組類型即可。(a)structstudent{intnum;charname[20];floatscore;}structstudentstudent1[45];(b)structstudent{intnum;charname[20];floatscore;}student1[45];(c)struct{intnum;charname[20];floatscore;}student1[45];7.3結(jié)構(gòu)體數(shù)組2.結(jié)構(gòu)體數(shù)組的初始化與其他類型的數(shù)組一樣,對結(jié)構(gòu)體數(shù)組可以初始化。structstudent{intnum;charname[20];floatscore;}a[2]={{1001,"Zhang",85},{1002,"Wang",86}};7.4.1指向結(jié)構(gòu)體變量的指針
1.指向結(jié)構(gòu)體變量的指針及其定義
C語言編譯器嚴(yán)格地按照順序為每個結(jié)構(gòu)體變量的成員遞增地分配存儲空間。
結(jié)構(gòu)體變量的指針就是這個結(jié)構(gòu)體變量所在存儲單元段的起始地址。2.使用指向結(jié)構(gòu)體變量的指針引用結(jié)構(gòu)體變量的成員結(jié)構(gòu)體變量訪問的一般形式為:(*結(jié)構(gòu)體指針變量).成員名或:結(jié)構(gòu)體指針變量->成員名例如:(*spoint).num或:spoint->num7.4.2指向結(jié)構(gòu)體數(shù)組的指針1)為結(jié)構(gòu)體數(shù)組中的元素分配一個連續(xù)的存儲空間。說明:2)當(dāng)指針變量指向一個結(jié)構(gòu)體數(shù)組,這時結(jié)構(gòu)體指針變量的值是整個結(jié)構(gòu)體數(shù)組的首地址。(1)如果p=stu,表示指針p指向結(jié)構(gòu)體數(shù)組stu的第1個元素。stu+i和p+i均表示數(shù)組第i個元素的地址,stu+i和p+i與stu[i]意義相同。(2)如果指針變量p指向數(shù)組的某一個元素,則p++指向下一個元素。(3)一個結(jié)構(gòu)體指針變量雖然可以用來訪問結(jié)構(gòu)體變量或結(jié)構(gòu)體數(shù)組元素的成員,但是,不能使它指向一個成員。錯誤的:p=&stu[0].num;7.4.3結(jié)構(gòu)體指針變量作為函數(shù)的參數(shù)
用法和普通變量作實(shí)參是一樣的,屬于“值傳遞”方式。應(yīng)當(dāng)注意實(shí)參與形參的類型保持一致。(2)結(jié)構(gòu)體變量作實(shí)參(1)用結(jié)構(gòu)體變量的成員作參數(shù)。
這種傳送方式要經(jīng)全部成員逐個傳送,特別是成員為數(shù)組時將會使傳送的時間和空間開銷很大,嚴(yán)重地降低了程序的效率。因此,一般較少采用這種方法。(3)用指向結(jié)構(gòu)體變量(或數(shù)組)的指針作為實(shí)參,將結(jié)構(gòu)體變量(或數(shù)組)的地址傳給形參。
用指針變量作函數(shù)參數(shù)進(jìn)行傳送,這時由實(shí)參傳向形參的只是地址,減少了時間和空間的開銷。7.4.4結(jié)構(gòu)體與函數(shù)的類型
結(jié)構(gòu)體除了可以作為函數(shù)的參數(shù)外,函數(shù)的返回值也可以是結(jié)構(gòu)體變量或是指向結(jié)構(gòu)體變量的指針。當(dāng)函數(shù)的返回值是一個結(jié)構(gòu)體變量時,稱該函數(shù)為一個結(jié)構(gòu)體類型函數(shù),其一般形式為:struct結(jié)構(gòu)體名函數(shù)名(形參表){函數(shù)體}7.5鏈表7.5.1鏈表的概念
鏈表是一種常見的重要的數(shù)據(jù)結(jié)構(gòu),它是動態(tài)地進(jìn)行存儲分配的一種結(jié)構(gòu)。
單向鏈表
7.5.2動態(tài)存儲分配
所謂動態(tài)鏈表,就是在程序運(yùn)行過程中能從無到有地建立鏈表。
內(nèi)存管理函數(shù)(malloc、calloc和free為)有效利用內(nèi)存資源提供了手段。7.5.3鏈表的基本操作(1)建立鏈表。(2)查找與輸出鏈表中的數(shù)據(jù)。(3)在鏈表中插入一個結(jié)點(diǎn)。
(4)從鏈表中刪除一個結(jié)點(diǎn)。7.6共用體7.6.1共用體的概念和定義一般形式為:union共用體名
{共用體成員表列};共用體變量的定義也有三種形式。(2)在定義共用體類型的同時定義共用體變量。(1)先定義共用體類型,再定義共用體變量。(3)直接定義共用體類型的變量。例如:unionperdata{intclass;charoffice[10];};7.6.2共用體變量的引用一般引用形式為:注意以下幾點(diǎn):(1)同一個內(nèi)存段可以用來存放幾種不同類型的成員,但在每一瞬間只能存放其中一種,而不是同時存放幾種。(2)共用體變量中起作用的成員是最后一次存放的成員,在存入一個新的成員后,原有的成員就失去了作用。(3)共用體變量的地址和它的各成員的地址都是同一地址。共用體變量名.成員名(4)不能對共用體變量名賦值,也不能企圖引用變量名來得到一個值,還不能在定義共用體變量時對它初始化。(5)不能把共用體變量作為函數(shù)參數(shù),也不能使函數(shù)帶回共用體變量,但可以使用指向共用體變量的指針。(6)共用體類型可以出現(xiàn)在結(jié)構(gòu)體類型定義中,也可以定義共用體數(shù)組。7.7枚舉類型7.7.1枚舉的定義與說明一般形式為:枚舉變量也可用不同的方式說明:(1)先定義后說明。(2)同時定義說明。(3)直接說明。enum枚舉類型名{枚舉值表列};
enumweekday{sun,mon,tue,wed,thu,fri,sat};enumweekdaya,b,c;enumweekday{sun,mon,tue,wed,thu,fri,sat}a,b,c;enum{sun,mon,tue,wed,thu,fri,sat}a,b,c;7.7.2枚舉類型變量的賦值與引用枚舉類型在使用中有以下規(guī)定:(1)C編譯時,對枚舉元素按常量處理,故稱為枚舉常量。它們不是變量,因此不能對它們賦值。(2)枚舉元素作為常量,它們是有值的,C語言按定義順序使它們的值為0,1,2,3,…。(3)枚舉值可以用來作比較運(yùn)算。(4)一個枚舉變量的值只能是這幾個枚舉常量之一,可以將枚舉常量賦給一個枚舉變量,但不能將一個整數(shù)賦給一個枚舉變量。
(5)枚舉常量不是字符串,不能用下面方式輸出字符串"sun":printf("%s",sun);
如果想先檢查枚舉變量a的值,如果是sun,就輸出“sun”。if(a==sun)printf("sun")
7.8用typedef定義類型可以給已經(jīng)存在的系統(tǒng)類型或用戶構(gòu)造的類型重新命名。常用的用戶定義類型主要有三種應(yīng)用:
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 菊花種苗購銷合同
- 特許經(jīng)營合同
- 電商運(yùn)營合作合同協(xié)議書
- 車輛過戶協(xié)議合同
- 建筑施工分包合同書
- 職場裝修合同規(guī)定
- Unit 6 A Day in the Life Section A 1a-Pronunciation教學(xué)設(shè)計2024-2025學(xué)年人教版英語七年級上冊
- 2《丁香結(jié)》教學(xué)設(shè)計2024-2025學(xué)年統(tǒng)編版語文六年級上冊
- 陜西電子信息職業(yè)技術(shù)學(xué)院《寒區(qū)水力計算》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東司法警官職業(yè)學(xué)院《紀(jì)錄片創(chuàng)作與欣賞》2023-2024學(xué)年第二學(xué)期期末試卷
- 潔凈室施工組織設(shè)計方案
- 2025年太倉市文化旅游發(fā)展集團(tuán)限公司及子公司公開招聘12名高頻重點(diǎn)提升(共500題)附帶答案詳解
- 安裝承包合同(2025年)
- 馬桶采購合同范例
- 護(hù)理技能培訓(xùn)師競聘
- 北京市矢量地圖-可改顏色
- 新質(zhì)生產(chǎn)力與產(chǎn)品創(chuàng)新
- 2024年河北省公務(wù)員錄用考試《行測》真題及答案解析
- 《大學(xué)生創(chuàng)新創(chuàng)業(yè)基礎(chǔ)教程》第六章創(chuàng)業(yè)資源與融資
- 初中英語高頻熟詞生義
- 大慶醫(yī)學(xué)高等??茖W(xué)校單招參考試題庫(含答案)
評論
0/150
提交評論