c語言結(jié)構(gòu)體和共用體.ppt_第1頁
c語言結(jié)構(gòu)體和共用體.ppt_第2頁
c語言結(jié)構(gòu)體和共用體.ppt_第3頁
c語言結(jié)構(gòu)體和共用體.ppt_第4頁
c語言結(jié)構(gòu)體和共用體.ppt_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第九章 結(jié)構(gòu)體與共用體,結(jié)構(gòu)體,結(jié)構(gòu)體變量的定義,結(jié)構(gòu)體變量的引用,結(jié)構(gòu)體變量的初始化,結(jié)構(gòu)體數(shù)組,結(jié)構(gòu)體和指針,共用體,9.1 結(jié)構(gòu)體,結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型 用途:把不同類型的數(shù)據(jù)組合成一個整體-自定義數(shù)據(jù)類型 結(jié)構(gòu)體類型定義,struct 結(jié)構(gòu)體名 類型標識符 成員名; 類型標識符 成員名; . ;,成員類型可以是 基本型或構(gòu)造型,struct是關(guān)鍵字, 不能省略,合法標識符 可省:無名結(jié)構(gòu)體,例 struct student int num; char name20; char sex; int age; float score; char addr30; ;,結(jié)構(gòu)體類型定義描述結(jié)構(gòu)

2、 的組織形式,不分配內(nèi)存,結(jié)構(gòu)體類型定義的作用域,例子圖解,先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量 一般形式:,struct 結(jié)構(gòu)體名 類型標識符 成員名; 類型標識符 成員名; . ; struct 結(jié)構(gòu)體名 變量名表列;,9.2 結(jié)構(gòu)體變量的定義,一般形式:,struct 結(jié)構(gòu)體名 類型標識符 成員名; 類型標識符 成員名; . 變量名表列;,例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2;,定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量,一般形式:,struct 類

3、型標識符 成員名; 類型標識符 成員名; . 變量名表列;,例 struct int num; char name20; char sex; int age; float score; char addr30; stu1,stu2;,用無名結(jié)構(gòu)體直接定義 變量只能一次,直接定義結(jié)構(gòu)體變量,結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同 類型:不分配內(nèi)存; 變量:分配內(nèi)存 類型:不能賦值、存取、運算; 變量:可以 結(jié)構(gòu)體可嵌套 結(jié)構(gòu)體成員名與程序中變量名可相同,不會混淆 結(jié)構(gòu)體類型及變量的作用域與生存期,說明:,引用規(guī)則 結(jié)構(gòu)體變量不能整體引用,只能引用變量成員,可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)體變量 結(jié)構(gòu)

4、體嵌套時逐級引用,成員(分量)運算符 優(yōu)先級: 1 結(jié)合性:從左向右,引用方式: 結(jié)構(gòu)體變量名.成員名,9.3 結(jié)構(gòu)體變量的引用,形式一:,struct 結(jié)構(gòu)體名 類型標識符 成員名; 類型標識符 成員名; . ; 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”;,9.4 結(jié)構(gòu)體變量的初始化,struct 結(jié)構(gòu)體名 類型標識符 成員

5、名; 類型標識符 成員名; . 結(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”;,結(jié)構(gòu)體變量的初始化形式二:,struct 類型標識符 成員名; 類型標識符 成員名; . 結(jié)構(gòu)體變量=初始數(shù)據(jù);,例 struct int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beij

6、ing Road”;,結(jié)構(gòu)體變量的初始化形式三:,結(jié)構(gòu)體數(shù)組的定義 三種形式:,形式一: struct 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;,9.5 結(jié)構(gòu)體數(shù)組,例 struct int num; char name20; char sex;

7、 int age; stu =,;,結(jié)構(gòu)體數(shù)組引用,引用方式: 結(jié)構(gòu)體數(shù)組名下標.成員名,結(jié)構(gòu)體數(shù)組初始化,struct person char name20; int count; leader3=“Li”,0,“Zhang”,0,”Wang“,0; 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.count+; for(i=0;i3;i+) printf(%5s:%

8、dn,,leaderi.count); ,例 統(tǒng)計后選人選票,指向結(jié)構(gòu)體變量的指針 定義形式:struct 結(jié)構(gòu)體名 *結(jié)構(gòu)體指針名; 例 struct student *p;,使用結(jié)構(gòu)體指針變量引用成員形式,存放結(jié)構(gòu)體變量在內(nèi)存的起始地址,指向運算符 優(yōu)先級: 1 結(jié)合方向:從左向右,例 指向結(jié)構(gòu)體的指針變量,例 int n; int *p= n=10,struct student stu1; struct student *p= (*p).num=101,9.6 結(jié)構(gòu)體和指針,用結(jié)構(gòu)體變量的成員作參數(shù)-值傳遞 用指向結(jié)構(gòu)體變量或數(shù)組的指針作參數(shù)-地址傳遞 用結(jié)構(gòu)體變

9、量作參數(shù)-多值傳遞,效率低,用指向結(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 func(stru

10、ct 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); ,copy,例 用結(jié)構(gòu)體變量作函數(shù)參數(shù)(1),struct data int a, b, c; ; main() void func(struct data *parm

11、); 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( ,例 用結(jié)構(gòu)體指針變量作函數(shù)參數(shù)(2),構(gòu)造數(shù)據(jù)類型,也叫聯(lián)合體 用途:使幾個不同類型的變量共占一段內(nèi)存(相互覆蓋) 共用體類型定義 定義形式:,union 共用體名 類型標識符 成員名; 類型標識符 成員名; . ;,例 union data int i; char ch; float f; ;,類型定義不分配內(nèi)

12、存,9.8 共用體,形式一: union data int i; char ch; float f; a,b;,形式二: union data int i; char ch; float f; ; union data a,b,c,*p,d3;,形式三: union int i; char ch; float f; a,b,c;,共用體變量定義分配內(nèi)存, 長度=最長成員所占字節(jié)數(shù),共用體變量任何時刻 只有一個成員存在,共用體變量的定義,引用方式:,例 a.i=1; a.ch=a; a.f=1.5; printf(“%d”,a.i); (編譯通過,運行結(jié)果不對),引用規(guī)則 不能引用共用體變量,只

13、能引用其成員,共用體變量中起作用的成員是最后一次存放的成員,例 union int i; char ch; float f; a; a=1; (),不能在定義共用體變量時初始化,例 union int i; char ch; float f; a=1,a,1.5; (),可以用一個共用體變量為另一個變量賦值,例 float x; union int i; char ch; float f; a,b; a.i=1; a.ch=a; a.f=1.5; b=a; () x=a.f; (),共用體變量引用,運行結(jié)果: i=60501 ch0=101,ch1=141 ch0=A,ch1=a,main()

14、 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); ,例 將一個整數(shù)按字節(jié)輸出,區(qū)別: 存儲方式不同,聯(lián)系: 兩者可相互嵌套,結(jié)構(gòu)體與共用體,功能:用自定義名字為已有數(shù)據(jù)類型命名 類型定義簡單形式: typedef type name;,例 typedef int INTEGER;,類型定義語句關(guān)鍵字,已有數(shù)據(jù)類型名,用戶定義的類型名,例 typedef float REAL;,類型定義后

15、,與已有類型一樣使用,例 INTEGER a,b,c; REAL f1,f2;,說明: 1.typedef 沒有創(chuàng)造新數(shù)據(jù)類型 2.typedef 是定義類型,不能定義變量 3.typedef 與 define 不同,define typedef 預編譯時處理 編譯時處理 簡單字符置換 為已有類型命名,用typedef定義類型,按定義變量方法先寫出定義體 如 int i; 將變量名換成新類型名 如 int INTEGER; 最前面加typedef 如 typedef int INTEGER; 用新類型名定義變量 如 INTEGER i,j;,例 定義數(shù)組類型 int a100; int ARR

16、AY100; typedef int ARRAY100; ARRAY a,b,c;, int a100,b100,c100;,例 定義指針類型 char *str; char *STRING; typedef char *STRING; STRING p,s10;, char *p; char *s10;,例 定義函數(shù)指針類型 int (*p)(); int (*POWER)(); typedef int (*POWER)(); POWER p1,p2;, int (*p1)(),(*p2)();,例 定義結(jié)構(gòu)體類型 struct date int month; int day; int year; d;,例 定義結(jié)構(gòu)體類型 struct date int month; int day; int year; DATE;,例 定義結(jié)構(gòu)體類型 typedef struct date int month; int day; int year; DATE;,例 定

溫馨提示

  • 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

提交評論