版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、結(jié)構(gòu)體、共用體、枚舉結(jié)構(gòu)體、共用體、枚舉 內(nèi)容安排內(nèi)容安排結(jié)構(gòu)體1結(jié)構(gòu)體數(shù)組2結(jié)構(gòu)體指針3結(jié)構(gòu)和函數(shù)4鏈表5共用體、枚舉6內(nèi)容安排內(nèi)容安排結(jié)構(gòu)體1結(jié)構(gòu)體數(shù)組2結(jié)構(gòu)體指針3結(jié)構(gòu)和函數(shù)4鏈表5共用體、枚舉6結(jié)構(gòu)體結(jié)構(gòu)體 (Structure)v結(jié)構(gòu)體概述v結(jié)構(gòu)體類型的聲明v結(jié)構(gòu)體變量的定義v結(jié)構(gòu)體變量的初始化v結(jié)構(gòu)體變量的引用結(jié)構(gòu)體概述結(jié)構(gòu)體概述v結(jié)構(gòu)體v將不同類型的數(shù)據(jù)組合成一個整體v用來表示簡單類型無法描述的復(fù)雜對象v可以用結(jié)構(gòu)體來定義用戶自己的數(shù)據(jù)結(jié)構(gòu)v舉例v描述學(xué)生信息numnamesexagescoreaddr12039Bill GatesM4076.5New York結(jié)構(gòu)體類型的聲明結(jié)
2、構(gòu)體類型的聲明v一般形式vstruct 結(jié)構(gòu)體名 v 類型 成員名;v 類型 成員名;v . .v;結(jié)構(gòu)體類型聲明的說明結(jié)構(gòu)體類型聲明的說明 (1)v聲明了一種類型,而不是定義變量v結(jié)構(gòu)體名可以沒有,但是這樣就無法再次使用該結(jié)構(gòu)體類型了v成員表列中是成員(Member)的定義v成員的定義形式與變量定義相同v成員類型可以是另一結(jié)構(gòu)體類型,但不可直接或間接遞歸嵌套v成員表列不可為空,至少要有一個成員結(jié)構(gòu)體類型聲明的說明結(jié)構(gòu)體類型聲明的說明 (2)v注意不表示復(fù)合語句,其后有分號v同一結(jié)構(gòu)體的成員不能重名v不同結(jié)構(gòu)體的成員可以重名v結(jié)構(gòu)體成員和其他變量可以重名v結(jié)構(gòu)體類型與其成員或其他變量可重名vs
3、truct test int test; test;v結(jié)構(gòu)體類型名稱是struct 結(jié)構(gòu)體名,注意struct關(guān)鍵字不能省略結(jié)構(gòu)體類型聲明的說明結(jié)構(gòu)體類型聲明的說明 (3)v即使兩個結(jié)構(gòu)體聲明中的成員類型、名稱、順序都完全一致,它們也是不同的類型v結(jié)構(gòu)體類型也要“先聲明,后使用”v如果結(jié)構(gòu)體類型聲明在函數(shù)內(nèi)部,則該函數(shù)之外無法引用此結(jié)構(gòu)體類型v一般把結(jié)構(gòu)體類型聲明放到文件最前面v也可以把結(jié)構(gòu)體類型聲明放在頭文件里結(jié)構(gòu)體類型的聲明舉例結(jié)構(gòu)體類型的聲明舉例struct student unsigned num; /* 學(xué)號學(xué)號 */ char name20; /* 姓名姓名 */ char sex
4、; /* 性別性別 */ unsigned age; /* 年齡年齡 */ float score; /* 分?jǐn)?shù)分?jǐn)?shù) */ char addr50; /* 地址地址 */;結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義 (1)v先聲明結(jié)構(gòu)體類型再定義變量struct student unsigned num; char name20; char sex; unsigned age; float score; char addr50;struct student stu1, stu2;結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義 (2)v在聲明結(jié)構(gòu)體類型的同時定義變量struct student unsigned num
5、; char name20; char sex; unsigned age; float score; char addr50; stu1, stu2;結(jié)構(gòu)體變量的定義結(jié)構(gòu)體變量的定義 (3)v直接定義無名結(jié)構(gòu)類型變量struct unsigned num; char name20; char sex; unsigned age; float score; char addr50; stu1, stu2;結(jié)構(gòu)體聲明和變量定義舉例結(jié)構(gòu)體聲明和變量定義舉例struct date int year, month, day; ;struct student unsigned num; char nam
6、e20; char sex; struct date birthday; float score; stu1, stu2;結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體變量的初始化v按照成員的順序和類型對成員初始化struct date date1 = 1984, 10, 20;struct student stu = 1001, /*unsigned num*/ Tom, /*char name20*/ M, /*char sex*/ 1983, 9, 20,/*struct date birthday*/ 93.5 /*float score*/;結(jié)構(gòu)體變量中成員的引用結(jié)構(gòu)體變量中成員的引用v一般形式v結(jié)構(gòu)體變
7、量名.成員名v成員運算符 .v具有最高的優(yōu)先級,自左向右結(jié)合v說明v結(jié)構(gòu)體成員和同類型的變量用法相同v若成員類型又是一個結(jié)構(gòu)體,則可以使用若干個成員運算符,訪問最低一級的成員結(jié)構(gòu)體變量中成員的引用舉例結(jié)構(gòu)體變量中成員的引用舉例struct student stu;. .scanf(%f, &stu.score);stu.num = 12345;stu.birthday.month = 11;stu.score = sqrt(stu.score) * 10;strcpy(, Mike);printf(No.%d:, stu.num);結(jié)構(gòu)體變量整體引用結(jié)構(gòu)體變量整體引用v
8、結(jié)構(gòu)體類型變量之間可以直接相互賦值v實質(zhì)上是兩個結(jié)構(gòu)體變量相應(yīng)的存儲空間中的所有數(shù)據(jù)直接拷貝v包括復(fù)雜類型在內(nèi)的所有結(jié)構(gòu)體成員都被直接賦值,如字符串、結(jié)構(gòu)體類型等v函數(shù)的實參和形參可以是結(jié)構(gòu)體類型,并且遵循實參到形參的單向值傳遞規(guī)則v為了提高程序的效率,函數(shù)的參數(shù)多使用結(jié)構(gòu)體類型指針結(jié)構(gòu)體變量整體引用舉例結(jié)構(gòu)體變量整體引用舉例struct student stu1, stu2=1002, Kate, F, 1981, 11, 4, 89.0;void print(struct student s) printf(%d,%4s,%c,%d.%02d.%02d,%4.1fn, s.num, s.n
9、ame, s.sex, s.birthday.year, s.birthday.month, s.birthday.day, s.score);void main () stu1 = stu2; /* 直接賦值直接賦值 */ print(stu1); /* 1002,Kate,F,1981.11.04,89.0 */內(nèi)容安排內(nèi)容安排結(jié)構(gòu)體1結(jié)構(gòu)體數(shù)組2結(jié)構(gòu)體指針3結(jié)構(gòu)和函數(shù)4鏈表5共用體、枚舉6結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組v結(jié)構(gòu)體數(shù)組的用法與基本類型數(shù)組類似v定義、初始化、引用等v結(jié)構(gòu)體數(shù)組可用于表示二維表格v舉例struct student s10;for (i=0; i10; i+) scanf(
10、%d,%s,%c,%d,%f, &si.num, , &si.sex, &si.age, &si.score);結(jié)構(gòu)體數(shù)組初始化及應(yīng)用舉例結(jié)構(gòu)體數(shù)組初始化及應(yīng)用舉例struct student stu = 1001,Tom,M,1980,1,2,85.5, 1002,Kate,F,1981,11,4,89.0, 1003,Mike,M,1980,3,5,95.5;for (i=0; i)引用指針?biāo)赶虻慕Y(jié)構(gòu)體的成員v指向運算符 -v結(jié)構(gòu)體指針-成員名v具有最高的優(yōu)先級,自左向右結(jié)合v若struct student stu, *p=&stu;
11、v則stu.num、(*p).num、p-num等效指向結(jié)構(gòu)體數(shù)組的指針指向結(jié)構(gòu)體數(shù)組的指針v指向結(jié)構(gòu)體數(shù)組的指針v與指向其他基本類型數(shù)組的指針用法類似v注意相關(guān)運算符的結(jié)合方向和優(yōu)先級v舉例struct student stu10, p=stu;+p-num; /* 同同+(p-num); */p+-num; /* 同同(p+)-num; */(+p)-num;(p+)-num;內(nèi)容安排內(nèi)容安排結(jié)構(gòu)體1結(jié)構(gòu)體數(shù)組2結(jié)構(gòu)體指針3結(jié)構(gòu)和函數(shù)4鏈表5共用體、枚舉6結(jié)構(gòu)體指針作函數(shù)參數(shù)舉例結(jié)構(gòu)體指針作函數(shù)參數(shù)舉例void input(struct student *p) scanf(%d %s %c
12、 %d.%d.%d %f, &p-num, p-name, &p-sex, &p-birthday.year, &p-birthday.month, &p-birthday.day, &p-score);void main () struct student stu20; int i; for (i=0; i20; i+) input(stu+i);定義類型別名定義類型別名v一般形式vtypedef v舉例vtypedef float REAL; vtypedef struct v int month;v int day;v int year;v
13、 DATE;動態(tài)存儲分配函數(shù)動態(tài)存儲分配函數(shù)v動態(tài)分配存儲v根據(jù)需要開辟或釋放存儲單元v相關(guān)函數(shù)vmalloc函數(shù)vcalloc函數(shù)vfree函數(shù)v說明v應(yīng)包含malloc.h或stdlib.hmalloc函數(shù)函數(shù)v函數(shù)原型vtypedef unsigned size_t;vvoid *malloc(size_t size);v參數(shù)vsize:分配存儲空間的字節(jié)數(shù)v返回值v若成功,返回指向分配區(qū)域起始地址的指針v若失敗,返回NULLcalloc函數(shù)函數(shù)v函數(shù)原型vvoid *calloc(size_t n,v size_t size);v參數(shù)vn :分配內(nèi)存的項目數(shù)vsize:分配內(nèi)存的每個項
14、目的字節(jié)數(shù)v返回值v若成功,返回指向分配區(qū)域起始地址的指針v若失敗,返回NULLfree函數(shù)函數(shù)v函數(shù)原型vvoid free(void *ptr);v參數(shù)vptr:要釋放的內(nèi)存區(qū)地址v說明v釋放prt指向的內(nèi)存區(qū)v釋放后的內(nèi)存區(qū)能夠分配給其他變量使用內(nèi)容安排內(nèi)容安排結(jié)構(gòu)體1結(jié)構(gòu)體數(shù)組2結(jié)構(gòu)體指針3結(jié)構(gòu)和函數(shù)4鏈表5共用體、枚舉6結(jié)構(gòu)體的應(yīng)用結(jié)構(gòu)體的應(yīng)用鏈表鏈表 (Link List)a1 a2 a3 .an headstruct nodedata nextaistruct node int data; struct node *next; ;struct node *head;鏈表的操作鏈表
15、的操作v鏈表的建立v從鏈尾到鏈頭:新結(jié)點插入到鏈頭v從鏈頭到鏈尾:新結(jié)點插入到鏈尾v鏈表的遍歷v刪除結(jié)點v根據(jù)一定的條件,刪除一個或多個結(jié)點v插入結(jié)點v根據(jù)一定的條件,把新結(jié)點插入到指定位置建立鏈表建立鏈表 (從鏈尾到鏈頭從鏈尾到鏈頭)headai-1. head = p; head = p; p = malloc(sizeof (struct node); p = malloc(sizeof (struct node); p-data = ai; p-data = ai; for(i=0; in; i+) for(i=0; inext = head; p-next = head;建立鏈表建立
16、鏈表 (從鏈頭到鏈尾從鏈頭到鏈尾)ai-1. p-next = q; p-next = q; q = malloc(sizeof (struct node); q = malloc(sizeof (struct node); q-data = ai; q-data = ai; for(i=0; in; i+) for(i=0; inext = NULL; q-next = NULL;p p = q; p = q;遍歷鏈表遍歷鏈表.ai-1aiai+1. p = p-next; p = p-next;p while(p) while(p) printf(%d, p-data); printf(%d, p-data);刪除結(jié)點刪除結(jié)點.ai-1aiai+1. p-next = q-next; p-next = q-next; free(q); free(q); q = p-next; q = p-next;pq if(p-next if(p-next滿足刪除條件滿足刪除條件) )插入結(jié)點插入結(jié)點.aiai+1. p-next = q; p-next = q; q = malloc(sizeof (struct node); q = malloc(sizeof (struct node); q-data = x;
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度體育賽事官方賽事組織與管理合同
- 二零二五年度時尚配飾商標(biāo)轉(zhuǎn)讓合同3篇
- 2025版木材加工廠租賃合同編制指南詳解3篇
- 二零二五年度口腔醫(yī)院臨床路徑管理與優(yōu)化承包合同3篇
- 2025年度木門品牌授權(quán)與銷售合同
- 第3章 物質(zhì)構(gòu)成的奧秘【考題猜想】(解析版)-2023-2024學(xué)年九年級化學(xué)上學(xué)期期中考點大串講(滬教版全國)
- 課題申報參考:面向智能網(wǎng)聯(lián)混行交通路網(wǎng)的車道布局優(yōu)化研究
- 2025年度農(nóng)家樂美食品牌授權(quán)與維權(quán)合同范本
- 二零二五版金融科技內(nèi)部股東全部股權(quán)轉(zhuǎn)讓與業(yè)務(wù)布局合同4篇
- 二零二五版木方板材出口企業(yè)貿(mào)易融資合同樣本3篇
- 人教版八年級數(shù)學(xué)下冊舉一反三專題17.6勾股定理章末八大題型總結(jié)(培優(yōu)篇)(學(xué)生版+解析)
- 2024屆上海高考語文課內(nèi)古詩文背誦默寫篇目(精校版)
- DL-T5024-2020電力工程地基處理技術(shù)規(guī)程
- 2024年度-美團(tuán)新騎手入門培訓(xùn)
- 初中數(shù)學(xué)要背誦記憶知識點(概念+公式)
- 駕照體檢表完整版本
- 農(nóng)產(chǎn)品農(nóng)藥殘留檢測及風(fēng)險評估
- 農(nóng)村高中思想政治課時政教育研究的中期報告
- 20100927-宣化上人《愣嚴(yán)咒句偈疏解》(簡體全)
- 4-熔化焊與熱切割作業(yè)基礎(chǔ)知識(一)
- 單元教學(xué)評一體化設(shè)計的探索與實踐以統(tǒng)編語文教材四年級下冊第一單元為例
評論
0/150
提交評論