版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、本章重點(diǎn)14.1 用typedef說明一種新類型名 14.2 結(jié)構(gòu)體類型14.3 共用體第第14章章 結(jié)構(gòu)體、共用體和用戶自定義類型結(jié)構(gòu)體、共用體和用戶自定義類型14.1 用typedef說明一種新類型名語(yǔ)言允許用戶自己定義類型說明符,也就是說允許由用戶為數(shù)據(jù)類型取“別名”。類型定義符typedef即可用來(lái)完成此功能,它可以語(yǔ)言的基本數(shù)據(jù)類型取“別名”,也可以為用戶自定義的結(jié)構(gòu)類型取“別名”。例如, typedef int INTEGER這以后就可用INTEGER來(lái)代替int作整型變量的類型說明了。例如:INTEGER a,b;它等效于:int a,b;用typedef定義數(shù)組類型、指針類型、
2、結(jié)構(gòu)類型將帶來(lái)很大的方便,不僅使程序書寫簡(jiǎn)潔,而且增強(qiáng)了可讀性。例如:typedef char NAME20; 表示NAME是字符數(shù)組類型,數(shù)組長(zhǎng)度為20。然后可用NAME 說明變量,如:NAME a1,a2,s1,s2;完全等效于:char a120,a220,s120,s220typedef struct stu char name20;int age; char sex; Student;定義Student表示struct stu的結(jié)構(gòu)類型,然后可用Student來(lái)說明結(jié)構(gòu)變量:Student body1,body2;typedef定義的一般形式為:typedef 原類型名 新類型名 有
3、時(shí)也可用宏定義(#define)來(lái)代替typedef的功能,但是宏定義是由預(yù)處理完成的,而typedef則是在編譯時(shí)完成的,它并不只是作簡(jiǎn)單的字符替換。14.2 結(jié)構(gòu)體類型C語(yǔ)言的基本數(shù)據(jù)類型有整型,實(shí)型,字符型等,在實(shí)際問題中,把一個(gè)對(duì)象抽象成數(shù)據(jù)來(lái)表示時(shí),往往需要一組不同基本數(shù)據(jù)類型的組合。 14.2.1 結(jié)構(gòu)體類型的說明結(jié)構(gòu)體類型說明的一般形式是:struct 結(jié)構(gòu)體標(biāo)識(shí)名 類型名1 結(jié)構(gòu)成員名表1; 類型名2 結(jié)構(gòu)成員名表2; 類型名n 結(jié)構(gòu)成員名表n; ;其中struct是關(guān)鍵字,是結(jié)構(gòu)體類型的標(biāo)志?!敖Y(jié)構(gòu)體標(biāo)識(shí)名”和“結(jié)構(gòu)成員名”都是用戶定義的標(biāo)識(shí)符。其中“結(jié)構(gòu)體標(biāo)識(shí)名”是可選項(xiàng),
4、在說明中可以不出現(xiàn)。成員表列由若干個(gè)成員組成,由一對(duì)大括號(hào)括起來(lái),每個(gè)成員都是該結(jié)構(gòu)的一個(gè)組成部分。對(duì)每個(gè)成員也必須作類型聲明,其形式如下: 類型說明符 成員名;結(jié)構(gòu)體成員名表中可以含有多個(gè)同類型的成員名,它們之間用逗號(hào)分隔。例如:struct student int math score, ;english score, sum;結(jié)構(gòu)體中的成員名可以和程序中的其它變量同名;不同結(jié)構(gòu)體中的成員也可以同名。 在成員列表中,類型名1類型名n不僅可以是簡(jiǎn)單數(shù)據(jù)類型,也可以是構(gòu)造類型,所以也可以是某種結(jié)構(gòu)體類型。這時(shí)稱為結(jié)構(gòu)體的嵌套。嵌套時(shí)允許內(nèi)嵌結(jié)構(gòu)體成員名與外層成員的名字相同。例如:struct
5、student char name10; char sex; struct date birthday; float score5; ;以上說明中,birthday成員的類型struct date是一個(gè)已經(jīng)說明過的結(jié)構(gòu)體類型。若事先沒有說明這一類型,則以上結(jié)構(gòu)體類型說明可改寫成如下:struct student char name10; char sex; struct int year;int month;int day; birthday; float score5; ;14.2.2 結(jié)構(gòu)體類型的變量的定義定義結(jié)構(gòu)類型變量由以下四種方法:1先定義結(jié)構(gòu),再說明結(jié)構(gòu)變量。例如:struct s
6、tudent int number; char name31; short age; char sex; char grade; char address101;struct student boy1, boy2;2在定義結(jié)構(gòu)類型的同時(shí)說明結(jié)構(gòu)變量。這種形式說明的一般形式為:struct 結(jié)構(gòu)名成員表列 變量名表列;例如:struct student int number; char name31; short age; char sex; char grade; char address101; boy1, boy2;3直接說明結(jié)構(gòu)變量。即在結(jié)構(gòu)變量定義中省去了結(jié)構(gòu)類型名,而直接給出結(jié)構(gòu)變量
7、。一般形式為:struct成員表列 變量名表列;例如以上結(jié)構(gòu)中把student省略,struct boy1, boy2;4使用typedef說明一個(gè)結(jié)構(gòu)體類型名,再用新類型名來(lái)定義變量。例如:typedef struct char ame2; char sex; struct date birthday; float sc4; STREC;STREC boy1, boy2;此處STREC是一個(gè)具體的結(jié)構(gòu)體類型名,它能夠唯一的標(biāo)識(shí)這種結(jié)構(gòu)體類型。因此,可用它來(lái)定義變量,不可再寫關(guān)鍵字struct。14.2.3 結(jié)構(gòu)體類型的變量的引用表示結(jié)構(gòu)變量成員的一般形式是:結(jié)構(gòu)變量名.成員名例如: boy1
8、. number 即boy1的學(xué)號(hào)boy2. name 即boy2的名字結(jié)構(gòu)變量的成員,與相同類型的普通變量并無(wú)區(qū)別,可以像普通變量一樣參與各種運(yùn)算,這根據(jù)其類型決定。例如:boy1.number = ;相同類型的結(jié)構(gòu)體變量之間還可以進(jìn)行整體引用賦值,例如:struct char name10; int num; per1, per2=“WUTING”, 23;執(zhí)行賦值語(yǔ)句:per1=per2;后,per2中每個(gè)成員變量的值都賦給了per1中對(duì)應(yīng)的同名成員。這種賦值方式很簡(jiǎn)潔,但必須保證賦值號(hào)兩邊的結(jié)構(gòu)體變量類型相同。14.2.4 結(jié)構(gòu)體類型變量的賦值和初始化結(jié)構(gòu)變量的賦值就
9、是給各結(jié)構(gòu)成員賦值??捎幂斎胝Z(yǔ)句或賦值語(yǔ)句來(lái)完成。例如:#include stdio.hint main(void)struct Studentint number; char name31; short age; char sex; char grade; boy1, boy2; boy1.number = 1461; printf(input name:); scanf(%s, ); printf(input age:); scanf(%d, &boy1.age); boy1.sex=m; boy1.grade=5; boy2=boy1; return 0;程序運(yùn)
10、行時(shí)輸入:input name:zhanginput age:12 和其他類型變量一樣,對(duì)結(jié)構(gòu)變量可以在定義時(shí)進(jìn)行初始化賦值。#include stdio.hint main(void) struct Student int number; char name31; short age; char sex; char grade; boy2, boy1 = 1461, zhang, 12, m, 5; boy2=boy1; return 0;14.2.5 結(jié)構(gòu)體類型數(shù)組 定義結(jié)構(gòu)體數(shù)組的方法和結(jié)構(gòu)變量相似,只需說明它為數(shù)組類型即可。例如:struct student int number; c
11、har name31; short age; char sex; char grade; student50;在定義結(jié)構(gòu)體數(shù)組時(shí),對(duì)其作初始化賦值,可不指定數(shù)組的長(zhǎng)度,此時(shí)數(shù)組長(zhǎng)度等于賦值項(xiàng)數(shù)。由于數(shù)組中的每個(gè)元素都是一個(gè)結(jié)構(gòu)體,所以通常將其成員的值依次放在一對(duì)大括號(hào)中,以便區(qū)分各個(gè)元素。例如:struct bookcard char num5; float money; bk3= “NO.1”, 32.5, “NO.2”, 40.0, “NO.3”, 65.5 ; 給二維數(shù)組的賦值規(guī)則同上 14.2.6 結(jié)構(gòu)體指針變量1結(jié)構(gòu)變量的指針一個(gè)指針變量當(dāng)用來(lái)指向一個(gè)結(jié)構(gòu)變量時(shí),稱之為結(jié)構(gòu)指針變量。
12、結(jié)構(gòu)指針變量中的值是所指向的結(jié)構(gòu)變量的首地址。有了結(jié)構(gòu)指針,就可通過結(jié)構(gòu)指針來(lái)訪問結(jié)構(gòu)變量或結(jié)構(gòu)變量成員,這與通過數(shù)組指針來(lái)訪問數(shù)組或數(shù)組元素是相同的。結(jié)構(gòu)指針變量說明的一般形式為:struct 結(jié)構(gòu)名 *結(jié)構(gòu)指針變量名結(jié)構(gòu)指針變量也必須要先賦值后才能使用。賦值是把結(jié)構(gòu)變量的首地址賦予該指針變量,不能把結(jié)構(gòu)名賦予該指針變量。 有了結(jié)構(gòu)指針變量,就能更方便地訪問結(jié)構(gòu)變量的各個(gè)成員。其訪問的一般形式為: (*結(jié)構(gòu)指針變量).成員名 或 結(jié)構(gòu)指針變量-成員名例如:(*ps).number 或 ps-number一個(gè)結(jié)構(gòu)指針變量雖然可以用來(lái)訪問結(jié)構(gòu)變量,但是,不能使它指向一個(gè)成員。也就是說不允許取一個(gè)
13、成員的地址來(lái)賦予它。2結(jié)構(gòu)數(shù)組的指針設(shè)pt指向的結(jié)構(gòu)變量pt-number pt指向的結(jié)構(gòu)變量的成員的number的值pt-number+ pt指向的結(jié)構(gòu)變量的成員的number的值,使用后加1+pt-number pt指向的結(jié)構(gòu)變量的成員的number先加1,再使用設(shè)pt指向的結(jié)構(gòu)數(shù)組(+pt)-number 先使pt指向下一數(shù)組元素,得到其number的值pt+-number 等同于(pt+)-number(pt+)-number 得到pt當(dāng)前指向數(shù)組元素的number值,后使pt指向下一元素 3結(jié)構(gòu)指針變量作為函數(shù)參數(shù)把一個(gè)結(jié)構(gòu)變量的值傳遞到另一個(gè)函數(shù),有3種方式:(1)傳遞結(jié)構(gòu)成員。
14、(2)傳遞結(jié)構(gòu)變量。 (3)傳遞結(jié)構(gòu)指針。 14.2.7 鏈表 使用數(shù)組存放數(shù)據(jù),必須事先定義好數(shù)組的長(zhǎng)度。但數(shù)組元素的插入和刪除會(huì)引起大量數(shù)據(jù)的移動(dòng),從而使簡(jiǎn)單的數(shù)據(jù)處理變得非常低效。為了能有效地解決這些問題,一種稱為鏈表的結(jié)構(gòu)類型得到了廣泛的應(yīng)用。 鏈表是一種動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu),它的特點(diǎn)是用一組任意的存儲(chǔ)單元(可以是連續(xù)的,也可以是不連續(xù)的)存放數(shù)據(jù)元素。鏈表中每一個(gè)元素稱為結(jié)點(diǎn),每一個(gè)結(jié)點(diǎn)都是由數(shù)據(jù)域和指針域組成的。每個(gè)結(jié)點(diǎn)中的指針域,包含一個(gè)指針,指向下一個(gè)結(jié)點(diǎn);也可以多個(gè)指針指(如雙向鏈表)。 鏈表有一個(gè)頭結(jié)點(diǎn),表示鏈表中的第一個(gè)元素,它的指針指向第二個(gè)結(jié)點(diǎn)。第二個(gè)結(jié)點(diǎn)的指針指向第三個(gè)結(jié)點(diǎn)
15、,如此往復(fù),直到最后一個(gè)元素,這就是鏈表的尾結(jié)點(diǎn),它的指針存放的是空值(NULL指針)。1靜態(tài)鏈表靜態(tài)鏈表的節(jié)點(diǎn)是在程序中事先定義好的,不是在運(yùn)行時(shí)動(dòng)態(tài)分配的,故稱靜態(tài)鏈表。例如以下靜態(tài)鏈表的創(chuàng)建和輸出。2動(dòng)態(tài)鏈表的創(chuàng)建和刪除動(dòng)態(tài)鏈表的創(chuàng)建是指在程序執(zhí)行時(shí),建立起一個(gè)一個(gè)節(jié)點(diǎn),并將它們連接成一串,形成一個(gè)鏈表。動(dòng)態(tài)鏈表不再是用時(shí),應(yīng)及時(shí)的刪除,以釋放動(dòng)態(tài)鏈表占用的內(nèi)存。 14.3 共用體共用體的類型說明和變量的定義方式與結(jié)構(gòu)體的類型說明和變量定義方式完全相同,不同的是共用體變量中的所有成員占有同一個(gè)存儲(chǔ)空間。14.3.1 共用體類型的說明和變量定義1共用體類型說明共用體類型說明的一般形式為:
16、union 共用體標(biāo)識(shí)名 類型名1 共用體成員名1; 類型名2 共用體成員名2; 類型名n 共用體成員名n; ;說明:union為關(guān)鍵字,是共用體類型的標(biāo)志。共用體表示幾個(gè)變量公用一個(gè)內(nèi)存位置, 在不同的時(shí)間保存不同的數(shù)據(jù)類型和不同長(zhǎng)度的變量。在內(nèi)存單元中,所有成員具有相同的首地址,并且重疊在一起。共用體中的成員可以是簡(jiǎn)單變量,也可以是數(shù)組、指針、結(jié)構(gòu)體和共用體。2共用體變量的定義用已說明的共用體類型來(lái)定義共用體變量。和定義結(jié)構(gòu)體變量類似,可以采用以下幾種方式:先定義共用體類型再定義變量;定義共用體類型的同時(shí)定義變量;直接定義共用體變量。例如,有一共用體類型定義如下:union cif_ty
17、char c; int i; float f; ; 用已說明的共用體類型來(lái)定義共用體變量。即用上面說明的共用體類型cif_ty定義一個(gè)名為cif的共用體變量, 可寫成: union cif_ty cif;也可以在定義共用體類型的同時(shí)定義共用體變量。例:union cif_ty char c; int i; float f; cif;還可以直接定義共用體變量。例:union char c; int i; float f; cif;在共用體變量cif中, 字符變量c,整型變量i,和浮點(diǎn)變量f公用同一內(nèi)存位置。當(dāng)一個(gè)共用體變量被定義時(shí), 編譯程序?qū)凑展灿皿w變量中最大的成員長(zhǎng)度分配一塊內(nèi)存。同樣也可
18、以定義共用體數(shù)組變量或共用體指針變量,例:union cif_ty ug3;union cif_ty *up=ug;當(dāng)定義共用體指針時(shí), 也要用-符號(hào), 來(lái)訪問共用體成員,可表示成: 共用體變量名-成員名 另外, 共用體類型和結(jié)構(gòu)類型可以互相嵌套,共用體類型可以出現(xiàn)在結(jié)構(gòu)體類型的定義中;結(jié)構(gòu)體類型也可以出現(xiàn)在共用體類型的定義中。 14.3.2 共用體變量的引用1共用體變量中成員的引用可以使用以下三種形式引用共用體變量中的成員:(1)共用體變量名.成員名(2)指針變量名成員名(3)(*指針變量名).成員名例如,對(duì)前一小節(jié)定義得共用體變量cif,如下引用其個(gè)成員:cif.c 引用char型成員c cif.i 引用int型成員icif.f 引用float型成員f共用體中的成員變量可參與其所屬類型允許的任何操作。但在訪問共用體成員時(shí)應(yīng)注意,共用體變量中起作用的是最近一次存入
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 英語(yǔ)教研活動(dòng)方案(4篇)
- 員工房屋租賃合同
- 辦公用房屋租賃合同
- 上海市商業(yè)房屋出租合同
- 雜志媒體廣告刊登合同
- 電視節(jié)目片頭插播廣告協(xié)議
- 2025-2030全球便攜式動(dòng)力空氣凈化呼吸器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球UPS和數(shù)據(jù)中心塑殼斷路器 (MCCB)行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)360o沉浸式投影系統(tǒng)行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年度互聯(lián)網(wǎng)廣告投放及效果監(jiān)測(cè)合同范本
- 工程建設(shè)行業(yè)標(biāo)準(zhǔn)內(nèi)置保溫現(xiàn)澆混凝土復(fù)合剪力墻技術(shù)規(guī)程
- 北師大版物理九年級(jí)全一冊(cè)課件
- 2024年第三師圖木舒克市市場(chǎng)監(jiān)督管理局招錄2人《行政職業(yè)能力測(cè)驗(yàn)》高頻考點(diǎn)、難點(diǎn)(含詳細(xì)答案)
- RFJ 006-2021 RFP型人防過濾吸收器制造與驗(yàn)收規(guī)范(暫行)
- 盆腔炎教學(xué)查房課件
- 屋面細(xì)石混凝土保護(hù)層施工方案及方法
- 新概念英語(yǔ)課件NCE3-lesson15(共34張)
- GB/T 3683-2023橡膠軟管及軟管組合件油基或水基流體適用的鋼絲編織增強(qiáng)液壓型規(guī)范
- 電視劇《瑯琊榜》特色分析
- 5A+Chapter+1+Changes+at+home+課件(新思維小學(xué)英語(yǔ))
- 安徽省2023年中考數(shù)學(xué)試卷(附答案)
評(píng)論
0/150
提交評(píng)論