C11結(jié)構(gòu)體與共用體.ppt_第1頁
C11結(jié)構(gòu)體與共用體.ppt_第2頁
C11結(jié)構(gòu)體與共用體.ppt_第3頁
C11結(jié)構(gòu)體與共用體.ppt_第4頁
C11結(jié)構(gòu)體與共用體.ppt_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第十一章 結(jié)構(gòu)體與共用體,教學(xué)目標(biāo) 掌握結(jié)構(gòu)體類型及結(jié)構(gòu)體變量的定義與引用方法; 理解結(jié)構(gòu)體變量的存儲(chǔ)結(jié)構(gòu); 初步掌握鏈表的概念及對(duì)鏈表的基本操作; 了解共用體類型及共用體類型變量的定義 ; 了解枚舉類型的定義方法及枚舉類型數(shù)據(jù)的使用 ; 了解用typedef定義數(shù)據(jù)類型別名的方法。 基本要求 能夠閱讀、編寫和調(diào)試有關(guān)結(jié)構(gòu)體的應(yīng)用程序,初步掌握有關(guān)鏈表的一些基本操作。,第十一章 結(jié)構(gòu)體與共用體,11.1 結(jié)構(gòu)體類型 結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型 用途:把不同類型的數(shù)據(jù)組合成一個(gè)整體-自定義數(shù)據(jù)類型,struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; . ;,成員類型可以是 基本型或

2、構(gòu)造型,struct是關(guān)鍵字, 不能省略,合法標(biāo)識(shí)符 可省:無名結(jié)構(gòu)體,一、結(jié)構(gòu)體類型的定義,struct student int num; char name20; char sex; int age; float score; char addr30; ;,結(jié)構(gòu)體類型定義只描述結(jié)構(gòu)的組織形式,不分配內(nèi)存。,例:結(jié)構(gòu)體類型的定義,struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; ; struct 結(jié)構(gòu)體名 變量名表列;,例 struct student int num; char name20; char sex; int age; float score; char ad

3、dr30; ; struct student stu1,stu2;,1. 先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量,二、結(jié)構(gòu)體變量的定義(三種形式),一般形式1:,struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; . 變量名表列;,例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2;,一般形式2:,2. 定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量,一般形式3:,struct 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; . 變量名表列;,例 struct i

4、nt num; char name20; char sex; int age; float score; char addr30; stu1,stu2;,用無名結(jié)構(gòu)體直接定義 變量,只能一次.,3. 直接定義無名結(jié)構(gòu)體變量,結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同。 類型:不分配內(nèi)存; 變量:分配內(nèi)存 類型:不能賦值,存取,運(yùn)算; 變量:可以賦值,存取,運(yùn)算 結(jié)構(gòu)體類型可以嵌套定義。 結(jié)構(gòu)體類型及變量的作用域與生存期。,例 struct date int month; int day; int year; ; struct student int num; char name20; struct dat

5、e birthday; stu;,說明:,變量stu的存儲(chǔ)結(jié)構(gòu):,1. 引用方式: 結(jié)構(gòu)體變量名.成員名,2. 引用規(guī)則:結(jié)構(gòu)體變量不能整體引用,只能引用變量成員,三、結(jié)構(gòu)體變量的引用,成員(分量)運(yùn)算符 優(yōu)先級(jí): 15(最高) 結(jié)合性:從左向右,結(jié)構(gòu)體變量的引用示例,例 struct student int num; char name20; struct date int month; int day; int year; birthday; stu1,stu2 =101,Wan Lin;,stu1.birthday.month=12;,3. 結(jié)構(gòu)體嵌套時(shí)應(yīng)逐級(jí)引用,stu1=102,Wa

6、n Lin; (),4. 特例: C語言允許:將一個(gè)結(jié)構(gòu)體變量的值 整體賦值給另一個(gè)結(jié)構(gòu)體變量。 例如:stu1=stu2; (),struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; . ; struct 結(jié)構(gòu)體名 結(jié)構(gòu)體變量=初始數(shù)據(jù);,例 struct student int num; char name20; char sex; int age; char addr30; ; struct student stu1=112,Wang Lin,M,19, 200 Beijing Road;,四、結(jié)構(gòu)體變量的初始化 形式一:,struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型

7、標(biāo)識(shí)符 成員名; . 結(jié)構(gòu)體變量=初始數(shù)據(jù);,例 struct student int num; char name20; char sex; int age; char addr30; stu1=112,Wang Lin,M,19, 200 Beijing Road;,形式二:,struct 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; . 結(jié)構(gòu)體變量=初始數(shù)據(jù);,例 struct int num; char name20; char sex; int age; char addr30; stu1=112,Wang Lin,M,19, 200 Beijing Road;,形式三:,形式一: s

8、truct student int num; char name20; char sex; int age; ; struct student stu2;,形式二: struct student int num; char name20; char sex; int age; stu2;,形式三: struct int num; char name20; char sex; int age; stu2;,11.2 結(jié)構(gòu)體數(shù)組一、結(jié)構(gòu)體數(shù)組的定義,順序初始化: struct student int num; char name20; char sex; int age; ; struct stu

9、dent stu =100,Wang Lin,M,20, 101,Li Gang,M,19, 110,Liu Yan,F,19;,例:定義類型時(shí)省略類型名 struct int num; char name20; char sex; int age; stu =,;,二、結(jié)構(gòu)體數(shù)組初始化,例:定義類型的同時(shí)定義變量并初始化 struct student int num; char name20; char sex; int age; stu =,;,結(jié)構(gòu)體數(shù)組初始化示例,引用方式: 結(jié)構(gòu)體數(shù)組名下標(biāo).成員名,struct student int num; char name20; char s

10、ex; int age; stu3;,stu1.age+; stu2.age=18;,strcpy(, ZhaoDa);,三、結(jié)構(gòu)體數(shù)組引用,struct person char name20; int count; leader3=Li1,0, Zhang2,0, Wang3,0; void main() int i, j; char leader_name20; for(i=1;i=10;i+) scanf(%s,leader_name); for(j=0;j3;j+) if(strcmp(leader_name,)=0) leaderj.coun

11、t+; for(i=0;i3;i+) printf(%5s:%dn,,leaderi.count); ,例 統(tǒng)計(jì)后選人選票,存放結(jié)構(gòu)體變量在內(nèi)存中的起始地址,1. 定義形式:struct 結(jié)構(gòu)體名 *結(jié)構(gòu)體指針名; 例 struct student *p;,11.3 指向結(jié)構(gòu)體的指針 一、指向結(jié)構(gòu)體變量的指針,(*結(jié)構(gòu)體指針名).成員名,結(jié)構(gòu)體指針名-成員名,指向成員運(yùn)算符 優(yōu)先級(jí): 15 (最高) 結(jié)合方向:從左向右,例 指向結(jié)構(gòu)體的指針變量,struct student stu1; struct student *p=,2. 使用結(jié)構(gòu)體指針變量引用成員,main()

12、 struct student long int num; char name20; char sex; float score; stu_1,*p; p= ,例 指向結(jié)構(gòu)體的指針變量,struct student int num; char name20; char sex; int age; stu3=10101,Li Lin,M,18, 10102,Zhang Fun,M,19, 10104,Wang Min,F,20; main() struct student *p; for(p=stu;pnum,p-name,p-sex,p-age); ,例 指向結(jié)構(gòu)體數(shù)組的指針,二、指向結(jié)構(gòu)體數(shù)

13、組的指針,11.4 結(jié)構(gòu)體與函數(shù),1. 結(jié)構(gòu)體類型變量可以作為函數(shù)實(shí)參,struct data int a, b, c; ; main() void func(struct data); struct data arg; arg.a=27; arg.b=3; arg.c=arg.a+arg.b; printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c); printf(Call Func().n); func(arg); printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c); void fu

14、nc(struct data parm) printf(parm.a=%d parm.b=%d parm.c=%dn,parm.a,parm.b,parm.c); printf(Process.n); parm.a=18; parm.b=5; parm.c=parm.a*parm.b; printf(parm.a=%d parm.b=%d parm.c=%dn,parm.a,parm.b,parm.c); printf(Return.n); ,2.函數(shù)可以返回結(jié)構(gòu)體類型的值(例11.7),#include #include struct student char num10; char nam

15、e20; float score; void PrintStruct(struct student stud) printf(%s %s %gn,stud.num,,stud.score); struct student InitialStruct(char *num,char *name,float score) struct student stud; strcpy(stud.num,num); strcpy(,name); stud.score=score; return stud; void main() struct student stud ;

16、stud=InitialStruct(00001,Xiao Li,98.5); PrintStruct(stud); ,struct data int a, b, c; ; void main() void func(struct data *parm); struct data arg; arg.a=27; arg.b=3; arg.c=arg.a+arg.b; printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c); printf(Call Func().n); func( ,3. 用結(jié)構(gòu)體指針變量作函數(shù)參數(shù),11.5 鏈表,鏈表是一種常

17、見的重要數(shù)據(jù)結(jié)構(gòu),它的主要功能是進(jìn)行動(dòng)態(tài)存、取數(shù)據(jù)。 鏈表的實(shí)現(xiàn)方式是:構(gòu)造一個(gè)結(jié)構(gòu)體,在此結(jié)構(gòu)體中除了數(shù)據(jù)成員外;還有一個(gè)指針成員,用來記錄下一個(gè)數(shù)據(jù)的位置。這樣的結(jié)構(gòu)體我們稱之為鏈表中的結(jié)點(diǎn)。,圖11.11 鏈表結(jié)構(gòu)示意圖,struct tag /*數(shù)據(jù)成員列表*/ struct tag *nextPtr; ;,1.靜態(tài)鏈表,#include struct node int data; struct node *nextPtr; void main() struct node a,b,c,*h,*p; a.data=3; b.data=6; c.data=9; p=h= ,運(yùn)行結(jié)果為: 3

18、 6 9,2.動(dòng)態(tài)鏈表,p=(struct node*)malloc(sizeof(struct node) p-data=100; c.nextPtr = p; /*將新節(jié)點(diǎn)加到鏈表的尾部*/ p-nextPtr= 0; /*NULL*/ p=(struct node*)malloc(sizeof(struct node) p-data=200; c.nextPtr.nextPtr =p; p-nextPtr= 0; /*NULL*/ free(p) /*從內(nèi)存中將p所指向的內(nèi)存塊刪除*/,NCRE 2004年4月考題(幾乎每次都考),#include #include struct NOD

19、E int num; struct NODE *next; ; void main() struct NODE *p,*q,*r; int sum=0; p=(struct NODE *) malloc(sizeof(struct NODE); q=(struct NODE *) malloc(sizeof(struct NODE); r=(struct NODE *) malloc(sizeof(struct NODE); p-num=1; q-num=2; r-num=3; p-next=q; q- next=r; r-next=NULL; sum+=q-next-num; sum+=p-

20、num; printf(sum=%dn ,sum); /* sum= 4*/ free(p); free(q); free(r); ,union 共用體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; . ;,例 union data int i; char ch; float f; ;,類型定義不分配內(nèi)存,共用體是一種構(gòu)造數(shù)據(jù)類型,也叫聯(lián)合體。 用途:所有的成員均共用一段存儲(chǔ)區(qū)域(相互覆蓋)。 一、共用體類型定義 定義形式:,11.6 共用體,形式二: union data int i; char ch; float f; a,b;,形式一: union data int i; char ch

21、; float f; ; union data a,b,*p,d3;,形式三: union int i; char ch; float f; a,b,c;,共用體變量定義分配內(nèi)存,長度=最長成員所占字節(jié)數(shù),二、共用體變量的定義,引用規(guī)則特例 可以用一個(gè)共用體變量為另一個(gè)變量賦值,引用規(guī)則 只能引用其成員,不能引用共用體變量。,union data int i; char ch; float f; ; union data a,b,d3,*p=d;,a.i=8; a.ch=A; a.f=1.5;,p-i ; p-ch ; p-f ;,(*p).i; (*p).ch ; (*p).f;,d0.i

22、; d0.ch ; d0.f;,三、共用體變量引用,a=1; (),b=a; (),#include union int i ; char ch ; float f ; a; main() a.i=65; printf(a.i=%d, a, ch=%dn, a.i, a.ch); a.ch=a; printf(a.i=%d, a.ch=%dn, a.i, a.ch); a.f=1.5; printf(a.f=%f, a.i=%dn, a.f, a.i); ,引用規(guī)則 不能在定義共用體變量時(shí)初始化 共用體變量中起作用的成員是最后一次存放的成員,例 union int i; char ch; fl

23、oat f; a=1, a,1.5; (),共用體變量引用示例,運(yùn)行結(jié)果: i=60501 ch0=101,ch1=141 ch0=A,ch1=a,main() union int_char int i; char ch2; x; x.i=24897; printf(i=%on,x.i); printf(ch0=%o,ch1=%on ch0=%c,ch1=%cn, x.ch0,x.ch1,x.ch0,x.ch1); ,例 將一個(gè)整數(shù)按字節(jié)輸出,區(qū)別: 存儲(chǔ)方式不同 聯(lián)系: 兩者可相互嵌套,四、結(jié)構(gòu)體與共用體的區(qū)別,struct int num; char name10; char sex; c

24、har job; union int class; char position10; category; person2;,例 結(jié)構(gòu)體中嵌套共用體,11.7 枚舉類型,C語言提供了另一種用戶定義類型稱為枚舉(enumeration)。枚舉就是用標(biāo)識(shí)符表示的整數(shù)常量的集合,用關(guān)鍵字enum定義。 從效果上看,枚舉常量是自動(dòng)設(shè)置值的符號(hào)常量。枚舉常量的起始值默認(rèn)為0,以后的值依次遞增1。 枚舉類型的定義形式為: enum 枚舉類型名 成員名=整數(shù)常量 ; 如:enum monthsJAN,FEB,MAR ; 則:JAN=0, FEB=1, MAR=2 。 如:enum monthsJAN=1,FE

25、B,MAR ; 則:JAN=1, FEB=2, MAR=3 。 如:enum monthsJAN=100,FEB,MAR=200 ; 則:JAN=100, FEB=101, MAR=200 。 枚舉型的作用:增加程序的可讀性。,功能:用自定義名字為已有數(shù)據(jù)類型命名 1. 類型定義簡單形式: typedef type name;,例 typedef int INTEGER; typedef float REAL;,類型定義語句關(guān)鍵字,已有數(shù)據(jù)類型名,用戶定義的類型名,類型定義后,與已有類型一樣使用,例 INTEGER a,b,c; REAL f1,f2;,說明: 1.typedef 沒有創(chuàng)造新數(shù)據(jù)類型 2.typedef 是定義類型,不能定義變量 3.typedef 與 define 不同,define typedef 預(yù)編譯時(shí)處理 編譯時(shí)處理 簡單字符置換 為已有類型命名,11.8 用typedef定義類型,例 定義數(shù)組類型 int a100; int ARRAY100; typedef int ARRAY100; ARRAY a,b,

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論