




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第十章 結(jié)構(gòu)體與共用體,10.1 結(jié)構(gòu)體 結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型 用途:把不同類型的數(shù)據(jù)組合成一個(gè)整體-自定義數(shù)據(jù)類型 結(jié)構(gòu)體類型定義,struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; . ;,成員類型可以是 基本型或構(gòu)造型,struct是關(guān)鍵字, 不能省略,合法標(biāo)識(shí)符 可省:無名結(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 student int nu
2、m; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2;,10.2 結(jié)構(gòu)體變量的定義 先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量 一般形式:,struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; . ; struct 結(jié)構(gòu)體名 變量名表列;,例 #define STUDENT struct student STUDENT int num; char name20; char sex; int age; float score; char addr30; ; STUDEN
3、T stu1,stu2;,定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量 一般形式:,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;,直接定義結(jié)構(gòu)體變量 一般形式:,struct 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; . 變量名表列;,例 struct int num; char name20; char sex; int age; float score; char add
4、r30; stu1,stu2;,用無名結(jié)構(gòu)體直接定義 變量只能一次,說明 結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同 類型:不分配內(nèi)存; 變量:分配內(nèi)存 類型:不能賦值、存取、運(yùn)算; 變量:可以 結(jié)構(gòu)體可嵌套 結(jié)構(gòu)體成員名與程序中變量名可相同,不會(huì)混淆 結(jié)構(gòu)體類型及變量的作用域與生存期,10.3 結(jié)構(gòu)體變量的引用 引用規(guī)則 結(jié)構(gòu)體變量不能整體引用,只能引用變量成員,可以將一個(gè)結(jié)構(gòu)體變量賦值給另一個(gè)結(jié)構(gòu)體變量 結(jié)構(gòu)體嵌套時(shí)逐級(jí)引用,成員(分量)運(yùn)算符 優(yōu)先級(jí): 1 結(jié)合性:從左向右,引用方式: 結(jié)構(gòu)體變量名.成員名,10.4 結(jié)構(gòu)體變量的初始化 形式一:,struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)
5、識(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”;,形式二:,struct 結(jié)構(gòu)體名 類型標(biāo)識(shí)符 成員名; 類型標(biāo)識(shí)符 成員名; . 結(jié)構(gòu)體變量=初始數(shù)據(jù);,例 struct student int num; char name20; char sex; int age; char addr30; stu1=1
6、12,“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”;,10.5 結(jié)構(gòu)體數(shù)組 結(jié)構(gòu)體數(shù)組的定義 三種形式:,形式一: struct student int num; char name20; char sex; int age; ; struct student
7、 stu2;,形式二: struct student int num; char name20; char sex; int age; stu2;,形式三: struct int num; char name20; char sex; int age; stu2;,結(jié)構(gòu)體數(shù)組初始化,例 struct int num; char name20; char sex; int age; stu =,;,順序初始化: struct student int num; char name20; char sex; int age; ; struct student stu =100,“Wang Lin”,
8、M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19;,例 struct student int num; char name20; char sex; int age; stu =,;,結(jié)構(gòu)體數(shù)組引用,引用方式: 結(jié)構(gòu)體數(shù)組名下標(biāo).成員名,例 統(tǒng)計(jì)后選人選票,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); fo
9、r(j=0;j3;j+) if(strcmp(leader_name,)=0) leaderj.count+; for(i=0;i3;i+) printf(%5s:%dn,,leaderi.count); ,10.6 結(jié)構(gòu)體和指針 指向結(jié)構(gòu)體變量的指針 定義形式:struct 結(jié)構(gòu)體名 *結(jié)構(gòu)體指針名; 例 struct student *p;,使用結(jié)構(gòu)體指針變量引用成員形式,存放結(jié)構(gòu)體變量在內(nèi)存的起始地址,指向運(yùn)算符 優(yōu)先級(jí): 1 結(jié)合方向:從左向右,例 指向結(jié)構(gòu)體的指針變量,main() struct student long int num
10、; char name20; char sex; float score; stu_1,*p; p= ,例 int n; int *p= n=10,struct student stu1; struct student *p= (*p).num=101,指向結(jié)構(gòu)體數(shù)組的指針,例 指向結(jié)構(gòu)體數(shù)組的指針,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;
11、for(p=stu;pnum,p-name,p-sex,p-age); ,用指向結(jié)構(gòu)體的指針作函數(shù)參數(shù) 用結(jié)構(gòu)體變量的成員作參數(shù)-值傳遞 用指向結(jié)構(gòu)體變量或數(shù)組的指針作參數(shù)-地址傳遞 用結(jié)構(gòu)體變量作參數(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)
12、; func(arg); printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c); void func(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); ,c
13、opy,例 用結(jié)構(gòu)體變量作函數(shù)參數(shù),struct data int a, b, c; ; 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( ,例 用結(jié)構(gòu)體指針變量作函數(shù)參數(shù),10.7 用typedef定義類型 功能:用自定義名字為已有數(shù)據(jù)類型命名 類型定義簡單形式: typedef type na
14、me;,例 typedef int INTEGER;,類型定義語句關(guān)鍵字,已有數(shù)據(jù)類型名,用戶定義的類型名,例 typedef float REAL;,類型定義后,與已有類型一樣使用,例 INTEGER a,b,c; REAL f1,f2;,說明: 1.typedef 沒有創(chuàng)造新數(shù)據(jù)類型 2.typedef 是定義類型,不能定義變量 3.typedef 與 define 不同,define typedef 預(yù)編譯時(shí)處理 編譯時(shí)處理 簡單字符置換 為已有類型命名,typedef定義類型步驟 按定義變量方法先寫出定義體 如 int i; 將變量名換成新類型名 如 int INTEGER; 最前面加
15、typedef 如 typedef int INTEGER; 用新類型名定義變量 如 INTEGER i,j;,例 定義數(shù)組類型 int a100; int ARRAY100; 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)(); P
16、OWER 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;,例 定義結(jié)構(gòu)體類型 DATE birthday, *p;, struct date int month; int day; int year; birthday, *p;,類
17、型定義可嵌套,例 typedef struct club char name20; int size; int year; GROUP; typedef GROUP *PG; PG pclub;, GROUP *pclub; struct club *pclub;,GROUP為結(jié)構(gòu)體類型 PG為指向GROUP的指針類型,10 . 8.1 鏈表概述, 鏈表中每個(gè)元素稱為一個(gè)結(jié)點(diǎn)。 構(gòu)成鏈表的結(jié)點(diǎn)必須是結(jié)構(gòu)體類型數(shù)據(jù)。, 相鄰結(jié)點(diǎn)的地址不一定是連續(xù)的,依靠指針將 它們連接起來。,10.8 用指針處理鏈表,struct node char c; struct node *next; ;,10 . 8
18、.2 簡單鏈表,10.8 用指針處理鏈表,struct student long num; float score; struct student *next; ;,head= ,main() struct student a,b,c,*head,*p; a. num=99101; a.score=89.5; b. num=99103; b.score=90; c. num=99107; c.score=85;,C語言提供了相關(guān)的存儲(chǔ)管理庫函數(shù)。這里僅介紹其中三個(gè),它們的原型說明在“stdlib.h”頭文件和“alloc.h”頭文件中,使用這三個(gè)函數(shù)時(shí),應(yīng)選擇其中一個(gè)頭文件包含到源程序中。,
19、動(dòng)態(tài)分配存儲(chǔ)區(qū)函數(shù)malloc( ) 函數(shù)原型:void *malloc(unsigned size); 調(diào)用格式:malloc(size) 功能:在內(nèi)存分配一個(gè)size字節(jié)的存儲(chǔ)區(qū)。調(diào)用 結(jié)果為新分配的存儲(chǔ)區(qū)的首地址,是一個(gè)void 類型指針。若分配失敗,則返回NULL(即0)。,10.8 用指針處理鏈表,10 . 8. 3 處理動(dòng)態(tài)鏈表所需要的函數(shù),在ANSI C標(biāo)準(zhǔn)中,關(guān)鍵字void有兩種用法。 第一種用法,可將無返回值的函數(shù)定義為void類型 第二種用法,用void * 定義指針,這是一個(gè)指向 非具體數(shù)據(jù)類型的指針,稱為無類型指針。, 動(dòng)態(tài)分配存儲(chǔ)區(qū)函數(shù)calloc( ) 函數(shù)原型:
20、void *calloc(unsigned int n,unsigned int size); 調(diào)用格式:calloc(n,size) 功能:在內(nèi)存分配一個(gè)n倍size字節(jié)的存儲(chǔ)區(qū)。調(diào)用結(jié)果為新分配的存儲(chǔ)區(qū)的首地址,是一個(gè)void類型指針。若分配失敗,則返回NULL(即0)。,10.8 用指針處理鏈表,10 . 8. 3 處理動(dòng)態(tài)鏈表所需要的函數(shù), 釋放動(dòng)態(tài)分配存儲(chǔ)區(qū)函數(shù)free( ) 函數(shù)原型:void free(void *p);,10.8 用指針處理鏈表,10 . 8. 3 處理動(dòng)態(tài)鏈表所需要的函數(shù),此函數(shù)無返回值,實(shí)參必須是一個(gè)指向動(dòng)態(tài)分配存儲(chǔ)區(qū)的指針,它可以是任何類型的指針變量。,調(diào)
21、用格式:free(p) 功能:釋放p所指向的動(dòng)態(tài)分配的存儲(chǔ)區(qū)。,建立鏈表就是根據(jù)需要一個(gè)一個(gè)地開辟新結(jié)點(diǎn)在結(jié)點(diǎn)中存放數(shù)據(jù)并建立結(jié)點(diǎn)之間的鏈接關(guān)系。,【例】建立一個(gè)學(xué)生數(shù)據(jù)的單向鏈表函數(shù)。,10.8用指針處理鏈表,10 . 8. 4 建立單向鏈表,#include #include #define LEN sizeof(struct student) struct student long num; float score; struct node *next; ; int n; struct student *creat(void) struct student*h; struct stude
22、nt*p,*q; n=0;,10 . 8. 4 建立單向鏈表,p=q=( struct student *) malloc(LEN); scanf(%ld,%f“, head=create( ); prlist(head); ,在鏈表中,如果要?jiǎng)h除第i個(gè)結(jié)點(diǎn),一般是將第(i-1)個(gè)結(jié)點(diǎn)直接與第(i+1)個(gè)結(jié)點(diǎn)相連接,然后再釋放第i個(gè)結(jié)點(diǎn)的存儲(chǔ)單元 。,10 . 8. 6 刪除單向鏈表中指定的結(jié)點(diǎn),例 刪除學(xué)生信息鏈表中指定學(xué)生的信息。,10 . 8. 6 刪除單向鏈表中指定的結(jié)點(diǎn),刪除第一個(gè)結(jié)點(diǎn),刪除中間結(jié)點(diǎn)或尾結(jié)點(diǎn),【例】刪除學(xué)生信息鏈表中指定學(xué)生的信息。,10 . 8. 6 刪除單向鏈表中
23、指定的結(jié)點(diǎn),(a) 刪除第一個(gè)結(jié)點(diǎn) (head=p-next),【例】刪除學(xué)生信息鏈表中指定學(xué)生的信息。,10 . 8. 6 刪除單向鏈表中指定的結(jié)點(diǎn),(b) 刪除中間結(jié)點(diǎn)或尾結(jié)點(diǎn) (q-next=p-next),【例】刪除學(xué)生信息鏈表中指定學(xué)生的信息。,10 . 8. 6 刪除單向鏈表中指定的結(jié)點(diǎn),(c) 未找到指定的結(jié)點(diǎn) (strcmp(x,p-name)!=0),struct student *del(struct student *head,long num) struct student *p1,*p2; if (head=NULL)printf(nlist null!n);return (head); p1=head; while(num!=p1-num r
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 會(huì)議室使用合同范例
- led燈具維護(hù)合同范例
- 個(gè)人買股合同范例
- 供應(yīng)鏈勞動(dòng)合同范例
- 二手集裝箱房轉(zhuǎn)讓合同范例
- 中介汽車銷售合同范例
- 事業(yè)單位勞務(wù)合同范例3篇
- 個(gè)體企業(yè)勞務(wù)合同范例
- 養(yǎng)生館勞務(wù)合同范例
- 農(nóng)業(yè)產(chǎn)品銷售代理合同范例
- 河南退役軍人專升本計(jì)算機(jī)真題答案
- 新高考普通高中數(shù)學(xué)人教A版教材目錄
- 心臟介入診療技術(shù)操作規(guī)范及流程
- 《影視鑒賞(第二版)》課件2-2故事片畫面
- 第八章:微生物的生態(tài)
- Q∕GDW 12070-2020 配電網(wǎng)工程標(biāo)準(zhǔn)化設(shè)計(jì)圖元規(guī)范
- 《定期定額納稅申報(bào)表》
- 【告知牌】某公司全套重大危險(xiǎn)源告知牌(7頁)
- 【課件】第十四單元第二十七節(jié)肖邦課件-2021-2022學(xué)年高中音樂人音版(2019)必修音樂鑒賞
- 贏時(shí)勝財(cái)務(wù)估值系統(tǒng)日常操作指引
- NB_T 10333-2019《水電工程場內(nèi)交通道路設(shè)計(jì)規(guī)范》_(高清最新)
評(píng)論
0/150
提交評(píng)論