




已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
程序設(shè)計(jì)技術(shù),C語言數(shù)據(jù)描述和C程序設(shè)計(jì)初步 結(jié)構(gòu)化程序設(shè)計(jì)基礎(chǔ)和C語言的控制結(jié)構(gòu) 數(shù)組及其應(yīng)用 函數(shù)與C程序結(jié)構(gòu) 指針與函數(shù) 指針與數(shù)組 字符串及其應(yīng)用 結(jié)構(gòu)體類型和聯(lián)合體類型 C語言的文件處理及其應(yīng)用 位運(yùn)算與枚舉類型,結(jié)構(gòu)體類型和聯(lián)合體類型,結(jié)構(gòu)體數(shù)據(jù)類型的基本概念 結(jié)構(gòu)體數(shù)組 結(jié)構(gòu)體數(shù)據(jù)類型與指針的關(guān)系 聯(lián)合體數(shù)據(jù)類型的基本概念,8.1 結(jié)構(gòu)體類型的基本概念,結(jié)構(gòu)體類型概述 計(jì)算機(jī)應(yīng)用中特別是在事務(wù)處理中,常常需要將不同的數(shù)據(jù)組合成為一個(gè)有機(jī)的整體,這些數(shù)據(jù)不屬于同種數(shù)據(jù)類型,但這些數(shù)據(jù)又相互關(guān)聯(lián),用以描述一個(gè)操作對(duì)象的各種屬性。這種由一些屬于不同數(shù)據(jù)類型的數(shù)據(jù)組合而成的構(gòu)造數(shù)據(jù)類型稱為結(jié)構(gòu)體類型。例如,學(xué)生登記表。 結(jié)構(gòu)體類型的特點(diǎn) 結(jié)構(gòu)體類型由若干個(gè)數(shù)據(jù)項(xiàng)組成,其中每一個(gè)數(shù)據(jù)項(xiàng)稱為一個(gè)結(jié)構(gòu)體成員,它們都屬于一種已經(jīng)定義的數(shù)據(jù)元素。 系統(tǒng)并沒有預(yù)先定義結(jié)構(gòu)體類型,須由設(shè)計(jì)者事先構(gòu)造。 要使用結(jié)構(gòu)體類型數(shù)據(jù),必須要先定義結(jié)構(gòu)體類型,然后再定義此種類型的變量。,8.1.1 結(jié)構(gòu)體類型和變量的定義,定義結(jié)構(gòu)體類型的一般形式: struct 結(jié)構(gòu)體名 數(shù)據(jù)類型 結(jié)構(gòu)體成員1; 數(shù)據(jù)類型 結(jié)構(gòu)體成員2; . . . 數(shù)據(jù)類型 結(jié)構(gòu)體成員n; ;,struct student char num8; char name20; char sex; int age; float Score; ;,定義結(jié)構(gòu)體類型變量的三種方法 先定義結(jié)構(gòu)體類型,然后定義變量。 struct 結(jié)構(gòu)體名 變量列表; 定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量。 struct 結(jié)構(gòu)體名 結(jié)構(gòu)體成員列表; 結(jié)構(gòu)體變量列表; 直接定義結(jié)構(gòu)體變量。 struct 結(jié)構(gòu)體成員列表; 結(jié)構(gòu)體變量列表;,8.1.1 結(jié)構(gòu)體類型和變量的定義,定義結(jié)構(gòu)體類型變量的三種方法 先定義結(jié)構(gòu)體類型,然后定義變量 同時(shí)定義結(jié)構(gòu)體類型和變量 只定義結(jié)構(gòu)體類型變量,8.1.1 結(jié)構(gòu)體類型和變量的定義,結(jié)構(gòu)體類型的嵌套定義 結(jié)構(gòu)體類型可以嵌套定義,即定義的一個(gè)結(jié)構(gòu)體類型的成員中可以有屬于另外一個(gè)已經(jīng)定義完成的結(jié)構(gòu)體類型的變量。,struct date int year; int month; int day; ;,struct student long number; char name20; struct date birthday; int age; char address80; long tel; ;,8.1.1 結(jié)構(gòu)體類型和變量的定義,為已經(jīng)存在的數(shù)據(jù)類型取別名 typedef 數(shù)據(jù)類型名 別名; 例:typedef int INTEGER; 則:int j,k; 等價(jià)于 INTEGER j,k; 定義構(gòu)造類型時(shí)為這些類型取別名 typedef struct 結(jié)構(gòu)體名 結(jié)構(gòu)體成員列表; 結(jié)構(gòu)體類型別名; 注意:定義別名后,程序中可使用原類型名或別名定義變量,別名習(xí)慣上用大寫字母。,8.1.2 關(guān)鍵字typedef的簡(jiǎn)單應(yīng)用,8.1.2 關(guān)鍵字typedef的簡(jiǎn)單應(yīng)用,struct student long number; struct date birthday; char name20; int age; char sex; char address80; long tel; ; typedef struct student STU; STU stu1,stu2,stu3 struct student 等價(jià)于 STU,typedef struct student long number; struct date birthday; char name20; int age; char sex; char address80; long tel; STU; STU stu1,stu2,stu3; struct student stu1,stu2;,使用typedef構(gòu)造復(fù)雜數(shù)據(jù)類型 構(gòu)造指定長(zhǎng)度的字符串?dāng)?shù)據(jù)類型 typedef char String100; String是字符串?dāng)?shù)據(jù)類型的類型名。 String s1; 等價(jià)于 char s1100; 構(gòu)造指針數(shù)據(jù)類型 typedef int *IP; 定義IP為整型的指針類型。 IP p1,p2;等價(jià)于 int *p1,*p2; 例8-1 用typedef構(gòu)造指定長(zhǎng)度的字符串類型 例8-3 用typedef構(gòu)造指針數(shù)據(jù)類型。,8.1.2 關(guān)鍵字typedef的簡(jiǎn)單應(yīng)用,8.1.3 結(jié)構(gòu)體變量的引用和輸入輸出,結(jié)構(gòu)體變量的引用 C語言不允許將結(jié)構(gòu)體變量作為整體操作,只能操作它的成員分量。成員分量的引用形式如下: 結(jié)構(gòu)體變量名.成員名 例如:stu1.sex stu1.tel 對(duì)于嵌套的結(jié)構(gòu)體變量,訪問其成員時(shí)應(yīng)采用逐級(jí)訪問的方法,直到得到所需訪問的成員為止。 結(jié)構(gòu)體變量名.一級(jí)成員名.二級(jí)成員名 例如:stu1.birthday.month 當(dāng)有兩個(gè)同類型結(jié)構(gòu)體變量時(shí),可將一個(gè)結(jié)構(gòu)體變量作為一個(gè)整體賦值給另外一個(gè)結(jié)構(gòu)體變量。,8.1.3 結(jié)構(gòu)體變量的引用和輸入輸出,結(jié)構(gòu)體變量的初始化 定義結(jié)構(gòu)體變量的同時(shí)初始化: struct 標(biāo)識(shí)符 變量名=結(jié)構(gòu)體變量成員值列表; struct student stu2,stu1= 5001,1988,12,30,”Liwei”,19,m,”12 songlin”,65102621; stu2=stu1; /兩個(gè)同類型結(jié)構(gòu)體變量的整體賦值 結(jié)構(gòu)體變量的輸入輸出 結(jié)構(gòu)體變量不能作為一個(gè)整體進(jìn)行輸入或輸出。只能將結(jié)構(gòu)體變量的成員作為輸入輸出的對(duì)象。,例8-5 結(jié)構(gòu)體變量引用和輸入輸出示例,8.1.3 結(jié)構(gòu)體變量的引用和輸入輸出,8.1.4 結(jié)構(gòu)體變量作函數(shù)參數(shù),結(jié)構(gòu)體變量作為函數(shù)參數(shù) 結(jié)構(gòu)體變量可以作為函數(shù)的參數(shù)在函數(shù)之間進(jìn)行傳遞。使用結(jié)構(gòu)體變量作為函數(shù)參數(shù)時(shí),數(shù)據(jù)的傳遞仍然是“傳值方式”;要求實(shí)參和形參的類型須一致。 實(shí)現(xiàn)方式:函數(shù)調(diào)用時(shí)系統(tǒng)為形參變量開辟一段內(nèi)存單元(按照結(jié)構(gòu)體變量所需要的存儲(chǔ)單元數(shù))以存放從實(shí)參傳遞過去的各結(jié)構(gòu)體變量成員分量的值。 例8-6 結(jié)構(gòu)體變量作函數(shù)參數(shù)示例,8.1.5 結(jié)構(gòu)體作函數(shù)的返回值類型,返回結(jié)構(gòu)體類型函數(shù)概念 結(jié)構(gòu)體類型的數(shù)據(jù)對(duì)象不但能作為函數(shù)參數(shù)在函數(shù)之間傳遞,還可以作為函數(shù)的返回值。當(dāng)函數(shù)的返回值類型是一個(gè)結(jié)構(gòu)體類型時(shí),該函數(shù)就稱為返回結(jié)構(gòu)體類型的函數(shù)。 函數(shù)定義形式 struct 標(biāo)識(shí)符 函數(shù)名(形式參數(shù)表及定義) 函數(shù)的定義和聲明部分; 函數(shù)的執(zhí)行部分; ,例8-7 返回結(jié)構(gòu)體類型函數(shù)的示例,結(jié)構(gòu)體類型和聯(lián)合體類型,結(jié)構(gòu)體數(shù)據(jù)類型的基本概念 結(jié)構(gòu)體數(shù)組 結(jié)構(gòu)體數(shù)據(jù)類型與指針的關(guān)系 聯(lián)合體數(shù)據(jù)類型的基本概念,結(jié)構(gòu)體數(shù)組的概念 結(jié)構(gòu)體數(shù)組中的每一個(gè)數(shù)組元素都是具有相同結(jié)構(gòu)體類型的結(jié)構(gòu)體變量。 如一個(gè)班的學(xué)生檔案,某單位的工資表。 結(jié)構(gòu)體數(shù)組的定義 定義結(jié)構(gòu)體數(shù)組的方式與定義結(jié)構(gòu)體變量相同,只須說明它為數(shù)組類型。也有三種方法: struct 結(jié)構(gòu)體名 數(shù)組名常量表達(dá)式; 使用typedef為結(jié)構(gòu)體類型名取別名來定義結(jié)構(gòu)體數(shù)組。 STU stu130;,8.2.1 結(jié)構(gòu)體數(shù)組的定義和元素引用,結(jié)構(gòu)體數(shù)組的初始化 定義結(jié)構(gòu)體數(shù)組的同時(shí)進(jìn)行初始化 初始化的一般形式為: struct 結(jié)構(gòu)體名 數(shù)組名=初始化數(shù)據(jù)列表;,8.2.1 結(jié)構(gòu)體數(shù)組的定義和元素引用,例:設(shè)有結(jié)構(gòu)體類型定義 sturct person char name20; int count; ; sturct person stu3=“Zhang”,0, “Wang”,0, “Li”,0;,結(jié)構(gòu)體數(shù)組元素的引用 一個(gè)結(jié)構(gòu)體數(shù)組元素就相當(dāng)于一個(gè)結(jié)構(gòu)體變量,其引用某一元素成員的方法與引用結(jié)構(gòu)體變量成員的方法相同。其形式為: 數(shù)組名下標(biāo).成員名 不能將結(jié)構(gòu)體數(shù)組元素作為一個(gè)整體直接進(jìn)行輸入輸出 可以將一個(gè)結(jié)構(gòu)體數(shù)組元素作為一個(gè)整體賦給同一結(jié)構(gòu)體數(shù)組的另外一個(gè)元素,或賦給一個(gè)同類型的結(jié)構(gòu)體變量。 例8-8 結(jié)構(gòu)體數(shù)組操作示例,8.2.1 結(jié)構(gòu)體數(shù)組的定義和元素引用,結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù) 結(jié)構(gòu)體數(shù)組可以作為函數(shù)的參數(shù)在函數(shù)間進(jìn)行傳遞。使用結(jié)構(gòu)體數(shù)組作為函數(shù)參數(shù)時(shí),實(shí)現(xiàn)的是“傳地址值調(diào)用”。即實(shí)參數(shù)組將全部或部分存儲(chǔ)區(qū)域提供給形參數(shù)組共享。,例8-9 結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)示例,8.2.1 結(jié)構(gòu)體數(shù)組的定義和元素引用,結(jié)構(gòu)體類型和聯(lián)合體類型,結(jié)構(gòu)體數(shù)據(jù)類型的基本概念 結(jié)構(gòu)體數(shù)組 結(jié)構(gòu)體數(shù)據(jù)類型與指針的關(guān)系 聯(lián)合體數(shù)據(jù)類型的基本概念,8.3.1 結(jié)構(gòu)體類型與指針的關(guān)系,指向結(jié)構(gòu)體變量的指針 通過指針變量訪問結(jié)構(gòu)體變量的成員形式: (*指針變量).成員名; 指針變量名-成員名;,struct person char name20; int count; stu, *p=,8.3.1 結(jié)構(gòu)體類型與指針的關(guān)系,執(zhí)行賦值語句: P-name=“l(fā)iu”; P-count=33;,Liu 33,用結(jié)構(gòu)體指針作為函數(shù)的參數(shù) 用指向結(jié)構(gòu)體變量的指針 作為函數(shù)的參數(shù),實(shí)現(xiàn)的 是“傳地址值調(diào)用”,可以 提高程序的執(zhí)行效率。,typedef struct stu char name20; int age; float score; STU;,實(shí)參 STU st3,*P=st;,st0,wang,形參 STU *X;,X,p,87,19,chen,zhao,20,99,88,18,st1,st2,P-name,P-score,8.3.1 結(jié)構(gòu)體類型與指針的關(guān)系,例8-10 輸入若干個(gè)學(xué)生信息并輸出,8.3.2 結(jié)構(gòu)體數(shù)組與指針的關(guān)系,指向結(jié)構(gòu)體數(shù)組的指針 指針指向結(jié)構(gòu)體數(shù)組中某個(gè)數(shù)組元素,例8-11 移動(dòng)指向結(jié)構(gòu)體數(shù)組的指針操作結(jié)構(gòu)體數(shù)組元素。,指向結(jié)構(gòu)體數(shù)組的指針 指針指向某結(jié)構(gòu)體數(shù)組的首地址(指針未移動(dòng)),8.3.2 結(jié)構(gòu)體數(shù)組與指針的關(guān)系,例8-12 不移動(dòng)指向結(jié)構(gòu)體數(shù)組的指針操作結(jié)構(gòu)體數(shù)組元素。,結(jié)構(gòu)體類型和聯(lián)合體類型,結(jié)構(gòu)體數(shù)據(jù)類型的基本概念 結(jié)構(gòu)體數(shù)組 結(jié)構(gòu)體數(shù)據(jù)類型與指針的關(guān)系 聯(lián)合體數(shù)據(jù)類型的基本概念,8.5 聯(lián)合體數(shù)據(jù)類型的基本概念,問題的提出及對(duì)策 問題的提出 在計(jì)算機(jī)應(yīng)用中,常常遇到數(shù)據(jù)對(duì)象的某一個(gè)區(qū)域值會(huì)隨條件不同而為不同內(nèi)容。此時(shí)要求增加同一存儲(chǔ)區(qū)域數(shù)據(jù)(類型)的可變性來處理。 解決方法 C語言通過定義聯(lián)合體(共用體)類型數(shù)據(jù),允許不同數(shù)據(jù)類型的數(shù)據(jù)使用共同的存儲(chǔ)區(qū)域。,8.5.1 聯(lián)合體類型的定義和變量引用,聯(lián)合體(共用體)類型的定義 聯(lián)合體類型的定義確定了參與共用存儲(chǔ)區(qū)域的成員項(xiàng)以及成員項(xiàng)具有的數(shù)據(jù)類型。 聯(lián)合體類型的定義形式: union 標(biāo)識(shí)符 數(shù)據(jù)類型 成員項(xiàng)1; 數(shù)據(jù)類型 成員項(xiàng)2; 數(shù)據(jù)類型 成員項(xiàng)n; ;,定義聯(lián)合體變量的三種方式 先定義聯(lián)合體類型,后定義聯(lián)合體類型變量; union 聯(lián)合體名 成員列表; union 聯(lián)合體名 變量列表; 同時(shí)定義聯(lián)合體類型和聯(lián)合體類型變量; union 聯(lián)合體名 成員列表;變量列表; 直接定義聯(lián)合體類型變量; union 成員列表;變量列表;,8.5.1 聯(lián)合體類型的定義和變量引用,同時(shí)定義聯(lián)合體類型和變量 union test int a; long b; key; 定義了一個(gè)聯(lián)合體類型union test和該類型的聯(lián)合體類型變量key, 32位系統(tǒng)中該類型所占的存儲(chǔ)單元長(zhǎng)度為8個(gè)字節(jié),由變量key的兩個(gè)成員分量分時(shí)復(fù)用(共享)。,8.5.1 聯(lián)合體類型的定義和變量引用,聯(lián)合體變量的引用 聯(lián)合體變量不能直接用于操作處理,只能操作它的成員。引用聯(lián)合體變量成員項(xiàng)形式如下: 聯(lián)合體變量名.成員名; 特別提示:一個(gè)聯(lián)合體變量不是同時(shí)存放多個(gè)成員的值,而只能存放一個(gè)成員項(xiàng)的值,即聯(lián)合體變量最后一次賦值后的內(nèi)容。 聯(lián)合體類型指針變量 可以定義指向聯(lián)合體變量的指針。,例8-15 聯(lián)合體變量引用示例,8.5.1 聯(lián)合體類型的定義和變量引用,8.5.2 聯(lián)合體類型與結(jié)構(gòu)體類型的區(qū)別,變量的存儲(chǔ)長(zhǎng)度不同 結(jié)構(gòu)體變量所占內(nèi)存長(zhǎng)度取決于所有成員分量占用的內(nèi)存長(zhǎng)度; 聯(lián)合體變量所占內(nèi)存長(zhǎng)度取決于其占內(nèi)存長(zhǎng)度最長(zhǎng)的成員分量; 賦值后所呈現(xiàn)的狀態(tài)不同 對(duì)于結(jié)構(gòu)體變量,其每一個(gè)成員分量占用不同的存儲(chǔ)空間,對(duì)某一成員的賦值與其它成員無關(guān)。 對(duì)于聯(lián)合體變量,所有成員分量共享同一段存儲(chǔ)區(qū)域,對(duì)某一成員的賦值會(huì)影響到其它成員。 例8-17 結(jié)構(gòu)體變量與聯(lián)合體變量存儲(chǔ)空間比較 例8-18 結(jié)構(gòu)體變量與聯(lián)合體變量的賦值比較,0x42,0x41,0x61/a,0x62/b,0x42,0x41,0x61,0x62,8.5.2 聯(lián)合體類型與結(jié)構(gòu)體類型
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥品遴選相關(guān)管理制度
- 藥庫突然緊急管理制度
- 藥店應(yīng)收應(yīng)付管理制度
- 藥店藥品存放管理制度
- 營運(yùn)汽車公司管理制度
- 設(shè)備元件保密管理制度
- 設(shè)備外圍修理管理制度
- 設(shè)備搬運(yùn)安全管理制度
- 設(shè)備泄露檢測(cè)管理制度
- 設(shè)備維修合同管理制度
- 學(xué)習(xí)解讀《水利水電建設(shè)工程驗(yàn)收規(guī)程》SLT223-2025課件
- 零星維修工程項(xiàng)目方案施工組織計(jì)劃
- FMEA第五版(實(shí)例2)
- 厭氧膠(MSDS)
- 智障兒童的家庭教育(課堂PPT)
- 《電路分析基礎(chǔ)》試題及答案
- 生物多樣性影響評(píng)價(jià)規(guī)范
- E16型超速保護(hù)系統(tǒng)的特點(diǎn)與使用
- 日本文學(xué)概論1
- 《鐵路貨車運(yùn)用維修規(guī)程》2018年10月
- 關(guān)口電能計(jì)量裝置管理辦法
評(píng)論
0/150
提交評(píng)論