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

下載本文檔

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

文檔簡介

1、程序設計技術(shù)C語言數(shù)據(jù)描述和C程序設計初步 結(jié)構(gòu)化程序設計根底和C語言的控制結(jié)構(gòu) 數(shù)組及其應用 函數(shù)與C程序結(jié)構(gòu) 指針與函數(shù) 指針與數(shù)組 字符串及其應用 結(jié)構(gòu)體類型和聯(lián)合體類型 C語言的文件處理及其應用 位運算與枚舉類型結(jié)構(gòu)體類型和聯(lián)合體類型 結(jié)構(gòu)體數(shù)據(jù)類型的根本概念 結(jié)構(gòu)體數(shù)組 結(jié)構(gòu)體數(shù)據(jù)類型與指針的關系聯(lián)合體數(shù)據(jù)類型的根本概念 8.1 結(jié)構(gòu)體類型的根本概念結(jié)構(gòu)體類型概述 計算機應用中特別是在事務處理中,常常需要將不同的數(shù)據(jù)組合成為一個有機的整體,這些數(shù)據(jù)不屬于同種數(shù)據(jù)類型,但這些數(shù)據(jù)又相互關聯(lián),用以描述一個操作對象的各種屬性。這種由一些屬于不同數(shù)據(jù)類型的數(shù)據(jù)組合而成的構(gòu)造數(shù)據(jù)類型稱為結(jié)構(gòu)體

2、類型。例如,學生登記表。 結(jié)構(gòu)體類型的特點結(jié)構(gòu)體類型由假設干個數(shù)據(jù)項組成,其中每一個數(shù)據(jù)項稱為一個結(jié)構(gòu)體成員,它們都屬于一種已經(jīng)定義的數(shù)據(jù)元素。 系統(tǒng)并沒有預先定義結(jié)構(gòu)體類型,須由設計者事先構(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)體類型變量

3、的三種方法先定義結(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)體類型變量struct A long number; char name20; int x; float y; struct A a1,a2;struct B long number; char name20; int x;

4、 float y;b1,b2; struct long number; char name20; int x; float y;c1,c2; 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)體類型

5、和變量的定義為已經(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)體類型別名; 注意:定義別名后,程序中可使用原類型名或別名定義變量,別名習慣上用大寫字母。8.1.2 關鍵字typedef的簡單應用8.1.2 關鍵字typedef的簡單應用struct student long number; struct date birthday; char name20; int age; char

6、sex; char address80; long tel;;typedef struct student STU;STU stu1,stu2,stu3struct student 等價于 STUtypedef 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)造復雜數(shù)據(jù)類型構(gòu)造指定長度的字符串數(shù)據(jù)類型typedef

7、char String100; String是字符串數(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 關鍵字typedef的簡單應用8.1.3 結(jié)構(gòu)體變量的引用和輸入輸出結(jié)構(gòu)體變量的引用 C語言不允許將結(jié)構(gòu)體變量作為整體操作,只能操作它的成員分量。成員分量的引用形式如下: 結(jié)構(gòu)體變量名.成員名 例如:stu1.sex stu1.tel

8、對于嵌套的結(jié)構(gòu)體變量,訪問其成員時應采用逐級訪問的方法,直到得到所需訪問的成員為止。結(jié)構(gòu)體變量名.一級成員名.二級成員名 例如:stu1.birthday.month 當有兩個同類型結(jié)構(gòu)體變量時,可將一個結(jié)構(gòu)體變量作為一個整體賦值給另外一個結(jié)構(gòu)體變量。 特別提示:嵌套的結(jié)構(gòu)體成員分量的數(shù)據(jù)類型與最后一個成員分量的數(shù)據(jù)類型一致。 例:設有結(jié)構(gòu)體類型及變量定義 struct A int x; float y; ; struct B struct A a; char c; ; struct B b;則有:b.a.x 整型變量 b.a.y 實型變量b.c 字符型變量8.1.3 結(jié)構(gòu)體變量的引用和輸入輸

9、出結(jié)構(gòu)體變量的初始化 定義結(jié)構(gòu)體變量的同時初始化: struct 標識符 變量名=結(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)體變量不能作為一個整體進行輸入或輸出。只能將結(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ù)之間進行傳遞。使用結(jié)構(gòu)

10、體變量作為函數(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ù)例如struct TEST int x; char ch;實參 struct TEST a;aa.xa.chbb.xb.ch形參 struct TEST b;10aa108.1.5 結(jié)構(gòu)體作函數(shù)的返回值類型返回結(jié)構(gòu)體類型函數(shù)概念結(jié)構(gòu)體類型的數(shù)據(jù)對象不但能作為函數(shù)參數(shù)在函數(shù)之間傳遞,還可以作為函數(shù)的返回值。當函數(shù)的返回值類型是一個結(jié)構(gòu)體類型時,該函數(shù)就稱為返回

11、結(jié)構(gòu)體類型的函數(shù)。函數(shù)定義形式 struct 標識符 函數(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ù)類型與指針的關系聯(lián)合體數(shù)據(jù)類型的根本概念 結(jié)構(gòu)體數(shù)組的概念 結(jié)構(gòu)體數(shù)組中的每一個數(shù)組元素都是具有相同結(jié)構(gòu)體類型的結(jié)構(gòu)體變量。 如一個班的學生檔案,某單位的工資表。 結(jié)構(gòu)體數(shù)組的定義定義結(jié)構(gòu)體數(shù)組的方式與定義結(jié)構(gòu)體變量相同,只須說明它為數(shù)組類型。也有三種方法: struct 結(jié)構(gòu)體名 數(shù)組名常量表達式; 使用typedef為結(jié)構(gòu)體類型名取別名來定義結(jié)構(gòu)體數(shù)組。 STU

12、stu130; 8.2.1 結(jié)構(gòu)體數(shù)組的定義和元素引用 結(jié)構(gòu)體數(shù)組的初始化 定義結(jié)構(gòu)體數(shù)組的同時進行初始化 初始化的一般形式為: struct 結(jié)構(gòu)體名 數(shù)組名=初始化數(shù)據(jù)列表;8.2.1 結(jié)構(gòu)體數(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ù)組元素就相當于一個結(jié)構(gòu)體變量,其引用某一元素成員的方法與引用結(jié)構(gòu)體變量成員的方法相同。其形式為: 數(shù)組名下標.成員名 不能將結(jié)構(gòu)體數(shù)組元素作為一個整體直接進行

13、輸入輸出 可以將一個結(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ù)間進行傳遞。使用結(jié)構(gòu)體數(shù)組作為函數(shù)參數(shù)時,實現(xiàn)的是“傳地址值調(diào)用。即實參數(shù)組將全部或局部存儲區(qū)域提供給形參數(shù)組共享。 例8-9 結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)例如struct A int x; char c; ;a(實參:struct A a3;)b(形參:struct A b) 8.2.1 結(jié)構(gòu)體數(shù)組的定義和元素引用 結(jié)構(gòu)體類型和聯(lián)合體類型 結(jié)構(gòu)體數(shù)據(jù)類型的根本概念 結(jié)構(gòu)

14、體數(shù)組 結(jié)構(gòu)體數(shù)據(jù)類型與指針的關系聯(lián)合體數(shù)據(jù)類型的根本概念 8.3.1 結(jié)構(gòu)體類型與指針的關系指向結(jié)構(gòu)體變量的指針 通過指針變量訪問結(jié)構(gòu)體變量的成員形式: *指針變量.成員名; 指針變量名-成員名;struct A int x; float y;a1,*p=&a1; &a1 = pa1 = *p a1.x (*p).x a1.y (*p).y p-x p-ystruct person char name20; int count;stu, *p=&stu;p&stustu*p8.3.1 結(jié)構(gòu)體類型與指針的關系指針變量p與結(jié)構(gòu)體變量stu的關系stu.countstu執(zhí)行賦值語

15、句:P-name=“l(fā)iu;P-count=33;Liu33用結(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;st0wang形參 STU *X;Xp8719chenzhao20998818st1st2P-nameP-score8.3.1 結(jié)構(gòu)體類型與指針的關系例8-10 輸入假設干個學生信息并輸出 8.3.2 結(jié)構(gòu)體數(shù)組與指針的關系指向結(jié)構(gòu)體數(shù)組的指針 指針指向結(jié)構(gòu)體數(shù)組中某個數(shù)組元素

16、struct A char c; int x;a5,*p1;p1=&a2;&a2 = p1a2 = *p1 a2.c (*p1).c a2.x (*p1).x p1-c p1-xap1例8-11 移動指向結(jié)構(gòu)體數(shù)組的指針操作結(jié)構(gòu)體數(shù)組元素。指向結(jié)構(gòu)體數(shù)組的指針 指針指向某結(jié)構(gòu)體數(shù)組的首地址(指針未移動)&ai = p2+i ai = *(p2+i) ai.c (*(p2+i).c ai.x (*(p2+i).x (p2+i)-c (p2+i)-xstruct A char c; int x;a5,*p2;p2=a;8.3.2 結(jié)構(gòu)體數(shù)組與指針的關系ap2例8-12 不移動指向結(jié)構(gòu)體數(shù)組的指針操

17、作結(jié)構(gòu)體數(shù)組元素。結(jié)構(gòu)體類型和聯(lián)合體類型 結(jié)構(gòu)體數(shù)據(jù)類型的根本概念 結(jié)構(gòu)體數(shù)組 結(jié)構(gòu)體數(shù)據(jù)類型與指針的關系聯(lián)合體數(shù)據(jù)類型的根本概念 8.5 聯(lián)合體數(shù)據(jù)類型的根本概念 問題的提出及對策問題的提出在計算機應用中,常常遇到數(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 標識符 數(shù)據(jù)類型 成員

18、項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的兩個成員分量分時復用共享。 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)存長

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論