結(jié)構(gòu)體類型和聯(lián)合體類型——C語言程序設(shè)計技術(shù).ppt_第1頁
結(jié)構(gòu)體類型和聯(lián)合體類型——C語言程序設(shè)計技術(shù).ppt_第2頁
結(jié)構(gòu)體類型和聯(lián)合體類型——C語言程序設(shè)計技術(shù).ppt_第3頁
結(jié)構(gòu)體類型和聯(lián)合體類型——C語言程序設(shè)計技術(shù).ppt_第4頁
結(jié)構(gòu)體類型和聯(lián)合體類型——C語言程序設(shè)計技術(shù).ppt_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

程序設(shè)計技術(shù),C語言數(shù)據(jù)描述和C程序設(shè)計初步 結(jié)構(gòu)化程序設(shè)計基礎(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ī)應(yīng)用中特別是在事務(wù)處理中,常常需要將不同的數(shù)據(jù)組合成為一個有機(jī)的整體,這些數(shù)據(jù)不屬于同種數(shù)據(jù)類型,但這些數(shù)據(jù)又相互關(guān)聯(lián),用以描述一個操作對象的各種屬性。這種由一些屬于不同數(shù)據(jù)類型的數(shù)據(jù)組合而成的構(gòu)造數(shù)據(jù)類型稱為結(jié)構(gòu)體類型。例如,學(xué)生登記表。 結(jié)構(gòu)體類型的特點 結(jié)構(gòu)體類型由若干個數(shù)據(jù)項組成,其中每一個數(shù)據(jù)項稱為一個結(jié)構(gòu)體成員,它們都屬于一種已經(jīng)定義的數(shù)據(jù)元素。 系統(tǒng)并沒有預(yù)先定義結(jié)構(gòu)體類型,須由設(shè)計者事先構(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)體類型的同時定義結(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)體類型,然后定義變量 同時定義結(jié)構(gòu)體類型和變量 只定義結(jié)構(gòu)體類型變量,8.1.1 結(jié)構(gòu)體類型和變量的定義,結(jié)構(gòu)體類型的嵌套定義 結(jié)構(gòu)體類型可以嵌套定義,即定義的一個結(jié)構(gòu)體類型的成員中可以有屬于另外一個已經(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; 等價于 INTEGER j,k; 定義構(gòu)造類型時為這些類型取別名 typedef struct 結(jié)構(gòu)體名 結(jié)構(gòu)體成員列表; 結(jié)構(gòu)體類型別名; 注意:定義別名后,程序中可使用原類型名或別名定義變量,別名習(xí)慣上用大寫字母。,8.1.2 關(guān)鍵字typedef的簡單應(yīng)用,8.1.2 關(guān)鍵字typedef的簡單應(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 等價于 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)造指定長度的字符串?dāng)?shù)據(jù)類型 typedef char String100; String是字符串?dāng)?shù)據(jù)類型的類型名。 String s1; 等價于 char s1100; 構(gòu)造指針數(shù)據(jù)類型 typedef int *IP; 定義IP為整型的指針類型。 IP p1,p2;等價于 int *p1,*p2; 例8-1 用typedef構(gòu)造指定長度的字符串類型 例8-3 用typedef構(gòu)造指針數(shù)據(jù)類型。,8.1.2 關(guān)鍵字typedef的簡單應(yīng)用,8.1.3 結(jié)構(gòu)體變量的引用和輸入輸出,結(jié)構(gòu)體變量的引用 C語言不允許將結(jié)構(gòu)體變量作為整體操作,只能操作它的成員分量。成員分量的引用形式如下: 結(jié)構(gòu)體變量名.成員名 例如:stu1.sex stu1.tel 對于嵌套的結(jié)構(gòu)體變量,訪問其成員時應(yīng)采用逐級訪問的方法,直到得到所需訪問的成員為止。 結(jié)構(gòu)體變量名.一級成員名.二級成員名 例如:stu1.birthday.month 當(dāng)有兩個同類型結(jié)構(gòu)體變量時,可將一個結(jié)構(gòu)體變量作為一個整體賦值給另外一個結(jié)構(gòu)體變量。,8.1.3 結(jié)構(gòu)體變量的引用和輸入輸出,結(jié)構(gòu)體變量的初始化 定義結(jié)構(gòu)體變量的同時初始化: struct 標(biāo)識符 變量名=結(jié)構(gòu)體變量成員值列表; struct student stu2,stu1= 5001,1988,12,30,”Liwei”,19,m,”12 songlin”,65102621; stu2=stu1; /兩個同類型結(jié)構(gòu)體變量的整體賦值 結(jié)構(gòu)體變量的輸入輸出 結(jié)構(gòu)體變量不能作為一個整體進(jìn)行輸入或輸出。只能將結(jié)構(gòu)體變量的成員作為輸入輸出的對象。,例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ù)據(jù)的傳遞仍然是“傳值方式”;要求實參和形參的類型須一致。 實現(xiàn)方式:函數(shù)調(diào)用時系統(tǒng)為形參變量開辟一段內(nèi)存單元(按照結(jié)構(gòu)體變量所需要的存儲單元數(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ù)對象不但能作為函數(shù)參數(shù)在函數(shù)之間傳遞,還可以作為函數(shù)的返回值。當(dāng)函數(shù)的返回值類型是一個結(jié)構(gòu)體類型時,該函數(shù)就稱為返回結(jié)構(gòu)體類型的函數(shù)。 函數(shù)定義形式 struct 標(biāo)識符 函數(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ù)組中的每一個數(shù)組元素都是具有相同結(jié)構(gòu)體類型的結(jié)構(gòu)體變量。 如一個班的學(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ù)組的同時進(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ù)組元素的引用 一個結(jié)構(gòu)體數(shù)組元素就相當(dāng)于一個結(jié)構(gòu)體變量,其引用某一元素成員的方法與引用結(jié)構(gòu)體變量成員的方法相同。其形式為: 數(shù)組名下標(biāo).成員名 不能將結(jié)構(gòu)體數(shù)組元素作為一個整體直接進(jìn)行輸入輸出 可以將一個結(jié)構(gòu)體數(shù)組元素作為一個整體賦給同一結(jié)構(gòu)體數(shù)組的另外一個元素,或賦給一個同類型的結(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ù)時,實現(xiàn)的是“傳地址值調(diào)用”。即實參數(shù)組將全部或部分存儲區(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ù),實現(xiàn)的 是“傳地址值調(diào)用”,可以 提高程序的執(zhí)行效率。,typedef struct stu char name20; int age; float score; STU;,實參 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 輸入若干個學(xué)生信息并輸出,8.3.2 結(jié)構(gòu)體數(shù)組與指針的關(guān)系,指向結(jié)構(gòu)體數(shù)組的指針 指針指向結(jié)構(gòu)體數(shù)組中某個數(shù)組元素,例8-11 移動指向結(jié)構(gòu)體數(shù)組的指針操作結(jié)構(gòu)體數(shù)組元素。,指向結(jié)構(gòu)體數(shù)組的指針 指針指向某結(jié)構(gòu)體數(shù)組的首地址(指針未移動),8.3.2 結(jié)構(gòu)體數(shù)組與指針的關(guān)系,例8-12 不移動指向結(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ù)類型的基本概念,問題的提出及對策 問題的提出 在計算機(jī)應(yīng)用中,常常遇到數(shù)據(jù)對象的某一個區(qū)域值會隨條件不同而為不同內(nèi)容。此時要求增加同一存儲區(qū)域數(shù)據(jù)(類型)的可變性來處理。 解決方法 C語言通過定義聯(lián)合體(共用體)類型數(shù)據(jù),允許不同數(shù)據(jù)類型的數(shù)據(jù)使用共同的存儲區(qū)域。,8.5.1 聯(lián)合體類型的定義和變量引用,聯(lián)合體(共用體)類型的定義 聯(lián)合體類型的定義確定了參與共用存儲區(qū)域的成員項以及成員項具有的數(shù)據(jù)類型。 聯(lián)合體類型的定義形式: union 標(biāo)識符 數(shù)據(jù)類型 成員項1; 數(shù)據(jù)類型 成員項2; 數(shù)據(jù)類型 成員項n; ;,定義聯(lián)合體變量的三種方式 先定義聯(lián)合體類型,后定義聯(lián)合體類型變量; union 聯(lián)合體名 成員列表; union 聯(lián)合體名 變量列表; 同時定義聯(lián)合體類型和聯(lián)合體類型變量; union 聯(lián)合體名 成員列表;變量列表; 直接定義聯(lián)合體類型變量; union 成員列表;變量列表;,8.5.1 聯(lián)合體類型的定義和變量引用,同時定義聯(lián)合體類型和變量 union test int a; long b; key; 定義了一個聯(lián)合體類型union test和該類型的聯(lián)合體類型變量key, 32位系統(tǒng)中該類型所占的存儲單元長度為8個字節(jié),由變量key的兩個成員分量分時復(fù)用(共享)。,8.5.1 聯(lián)合體類型的定義和變量引用,聯(lián)合體變量的引用 聯(lián)合體變量不能直接用于操作處理,只能操作它的成員。引用聯(lián)合體變量成員項形式如下: 聯(lián)合體變量名.成員名; 特別提示:一個聯(lián)合體變量不是同時存放多個成員的值,而只能存放一個成員項的值,即聯(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ū)別,變量的存儲長度不同 結(jié)構(gòu)體變量所占內(nèi)存長度取決于所有成員分量占用的內(nèi)存長度; 聯(lián)合體變量所占內(nèi)存長度取決于其占內(nèi)存長度最長的成員分量; 賦值后所呈現(xiàn)的狀態(tài)不同 對于結(jié)構(gòu)體變量,其每一個成員分量占用不同的存儲空間,對某一成員的賦值與其它成員無關(guān)。 對于聯(lián)合體變量,所有成員分量共享同一段存儲區(qū)域,對某一成員的賦值會影響到其它成員。 例8-17 結(jié)構(gòu)體變量與聯(lián)合體變量存儲空間比較 例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等.壓縮文件請下載最新的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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論