版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第7章 結(jié)構(gòu)體、鏈表與文件系統(tǒng)1結(jié)構(gòu)體聯(lián)合體枚舉類型1C數(shù)據(jù)類型基本類型構(gòu)造類型指針類型空類型void定義類型typedef數(shù)值類型字符類型char枚舉類型enum整 型浮點(diǎn)型單精度型float雙精度型double短整型short長整型long整型int數(shù)組結(jié)構(gòu)體struct聯(lián)合體union系統(tǒng)給定的數(shù)據(jù)類型在根本類型根底上自己定義的記錄某班30名學(xué)生的學(xué)號、姓名、性別、年齡、成績int ids30; char names3020; char sexes30; int ages30; float scores30概念引入:解決問題:記錄某班所有學(xué)生的成績 3 名? 30 名?float x,y
2、,z;float scores30;結(jié)構(gòu)體的定義及應(yīng)用思考在程序里表示一個人姓名、性別、年齡,怎么表示?想表示多少個人呢?如何用計算機(jī)程序?qū)崿F(xiàn)下述表格的管理? 表7-1 某學(xué)校學(xué)生成績管理表學(xué)號姓名性別入學(xué)時間計算機(jī)原理英 語數(shù) 學(xué)音 樂1令狐沖男1999908372822林平之男1999789288783岳靈珊女1999897298664任瑩瑩女1999789587905 6 數(shù)組的解決方法int studentId30; /* 最多可以管理30個學(xué)生, 每個學(xué)生的學(xué)號用數(shù)組的下標(biāo)表示*/charstudentName3010;charstudentSex302;int timeOfEnte
3、r30; /*入學(xué)時間用int表示*/int scoreComputer30;/*計算機(jī)原理課的成績*/int scoreEnglish30; /*英語課的成績*/int scoreMath30; /*數(shù)學(xué)課的成績*/int scoreMusic30; /*音樂課的成績*/數(shù)據(jù)的內(nèi)存管理方式 907889788392729572889887827866901234令狐沖林平之岳靈珊任瑩瑩男男女女1999199919991999數(shù)組的解決方法數(shù)組可處理大量的同類型數(shù)據(jù),數(shù)組中的每一個元素都屬于同一種數(shù)據(jù)類型數(shù)據(jù)的內(nèi)存管理方式 90788978839272957288988782786690123
4、4令狐沖林平之岳靈珊任瑩瑩男男女女1999199919991999數(shù)組的解決方法分配內(nèi)存不集中,尋址效率不高 對數(shù)組進(jìn)行賦初值時,容易發(fā)生錯位 結(jié)構(gòu)顯得比較零散,不容易管理希望的內(nèi)存分配圖 1令狐沖男1999908372822林平之男1999789288783岳靈珊女1999897298664任瑩瑩女199978958790結(jié)構(gòu)體的解決方法struct STUDENT int studentID; /*每個學(xué)生的序號*/ char studentName10;/*每個學(xué)生的姓名*/ char studentSex4; /*每個學(xué)生的性別*/ inttimeOfEnter; /*每個學(xué)生的入學(xué)時
5、間*/ intscoreComputer; /*每個學(xué)生的計算機(jī)原理成績*/ intscoreEnglish; /*每個學(xué)生的英語成績*/ intscoreMath; /*每個學(xué)生的數(shù)學(xué)成績*/ intscoreMusic; /*每個學(xué)生的音樂成績*/ ;struct STUDENT是一個類型struct STUDENT students4;students0.studentIDstudents0.scoreComputer它們都是變量,一般稱為結(jié)構(gòu)的成員變量結(jié)構(gòu)體結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型用途:把不同類型的數(shù)據(jù)組合成一個整體-自定義數(shù)據(jù)類型結(jié)構(gòu)體類型定義struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員
6、名; 類型標(biāo)識符 成員名; .;成員類型可以是根本型或構(gòu)造型struct是關(guān)鍵字,不能省略合法標(biāo)識符可省:無名結(jié)構(gòu)體分號不能省略例 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2; 結(jié)構(gòu)體變量的定義1、先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量一般形式: struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; .;struct 結(jié)構(gòu)體名 變量名表列;定義結(jié)構(gòu)體變量之后為其分配內(nèi)存單元namenumsexagescoread
7、dr4字節(jié)4字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié).stu1結(jié)構(gòu)體的內(nèi)存占用int 占用內(nèi)存字節(jié)數(shù) = 4struct 類型用內(nèi)存字節(jié)數(shù) = ?是所有成員變量的內(nèi)存總和嗎?struct numbershort i; /2 char ch; /1 float f; /4 ;printf(%dn, sizeof(struct number);用運(yùn)算符sizeof獲得結(jié)構(gòu)體大小sizeof(變量或表達(dá)式)sizeof(類型)8Why?結(jié)構(gòu)體的內(nèi)存占用事實(shí)上所有數(shù)據(jù)類型在內(nèi)存中都是從偶數(shù)地址開始存放的且結(jié)構(gòu)所占的實(shí)際空間一般是按照機(jī)器字長對齊的特定數(shù)據(jù)類型的數(shù)據(jù)項的大小是與機(jī)器相關(guān)的,如32位系統(tǒng):結(jié)構(gòu)體類
8、型大小=(成員數(shù)據(jù)類型大小的和+3)/4*47+3/4*4=8ifchichf非所有成員變量的內(nèi)存總和8個字節(jié)2、定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量一般形式:struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; .變量名表列;例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; 3、直接定義結(jié)構(gòu)體變量一般形式:struct 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; .變量名表列;例 struct int num; char name20; ch
9、ar sex; int age; float score; char addr30; stu1,stu2; 用無名結(jié)構(gòu)體直接定義變量只能一次結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同類型:不分配內(nèi)存; 變量:分配內(nèi)存結(jié)構(gòu)體類型是一個模型,類似系統(tǒng)給定的根本類型比方int、 float 等類型,只是結(jié)構(gòu)體類型是用戶自定義的而已。結(jié)構(gòu)體可嵌套結(jié)構(gòu)體成員名與程序中變量名可相同,不會混淆例 struct date int month; int day; int year; ; struct student int num; char name20; struct date birthday; stu;numnam
10、ebirthdaymonthdayyear結(jié)構(gòu)體變量的引用引用規(guī)那么 結(jié)構(gòu)體變量不能整體引用,只能引用變量成員可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)體變量結(jié)構(gòu)體嵌套時逐級引用成員(分量)運(yùn)算符優(yōu)先級: 1結(jié)合性:從左向右引用方式: 結(jié)構(gòu)體變量名.成員名例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score; stu1.age+;例 struct student i
11、nt num; char name20; char sex; int age; float score; char addr30; stu1,stu2; printf(“%d,%s,%c,%d,%f,%sn”,stu1); ()stu1=101,“Wan Lin”,M,19,87.5,“DaLian”; ()例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; stu2=stu1; ( )例 struct student int num; char name2
12、0; struct date int month; int day; int year; birthday; stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;結(jié)構(gòu)體變量的初始化形式一:struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; .;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,
13、“200 Beijing Road;形式二:struct 結(jié)構(gòu)體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; .結(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)識符 成員名; 類型標(biāo)識符 成員名; .結(jié)構(gòu)體變量=初始數(shù)據(jù);例 struct int num; char name20; char sex; int age; char addr30; stu1=112,
14、“Wang Lin,M,19, “200 Beijing Road; 定義自己的類型名 struct student student1,student2;/*可以*/ student student1,student2;/*不可以*/typedef struct student STUD ; STUD student1,student2; /*可以!*/typedef為一種已存在的類型定義一個新名字STUD與struct student類型是同義詞struct student int num; char name20; char sex; int age; float score; char
15、addr30;結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組的定義struct student int num; char name20; char sex; int age; ;struct student stu30;numnamesexagenumnamesexagestu0stu132B結(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,M,
16、20, 101,“Li Gang,M,19, 110,“Liu Yan,F,19; 例 struct student 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”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19; 全部初始化時維數(shù)可省結(jié)構(gòu)體數(shù)組引用引用方式: 結(jié)構(gòu)體數(shù)組名下標(biāo).成員名 struct stude
17、nt int num; char name20; char sex; int age; str3;stu1.age+;strcpy(, “ZhaoDa”);=“ZhaoDa 結(jié)構(gòu)體和指針指向結(jié)構(gòu)體變量的指針定義形式:struct 結(jié)構(gòu)體名 *結(jié)構(gòu)體指針名;例 struct student *p;使用結(jié)構(gòu)體指針變量引用成員形式存放結(jié)構(gòu)體變量在內(nèi)存的起始地址numnamesexagestupstruct student int num; char name20; char sex; int age; stu;struct student *p=&stu;(*結(jié)構(gòu)
18、體指針名).成員名結(jié)構(gòu)體指針名-成員名結(jié)構(gòu)體變量名.成員名指向運(yùn)算符優(yōu)先級: 1結(jié)合方向:從左向右#includemain() struct student long int num; char name20; char sex; float score; stu_1,*p; p=&stu_1; stu_1.num=89101; strcpy(stu_1.name,Li Lin); p-sex=M; p-score=89.5; printf(nNo:%ldnname:%snsex:%cnscore:%fn, (*p).num,p-name,stu_1.sex,p-score);例 int n;
19、 int *p=&n; *p=10; n=10struct student stu1;struct student *p=&stu1;stu1.num=101; (*p).num=101運(yùn)行結(jié)果:No:89101name: Li Lin sex:Mscore:89.5指向結(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; for(p=stu
20、;pnum,p-name,p-sex,p-age);numnamesexagestu0pstu1stu2p+1stu3相當(dāng)于p = &stu0;構(gòu)造數(shù)據(jù)類型,也叫共用體用途:使幾個不同類型的變量共占一段內(nèi)存(相互覆蓋)共用體類型定義union 共用體名 類型標(biāo)識符 成員名; 類型標(biāo)識符 成員名; .;例 union data int i; char ch; float f; ;類型定義不分配內(nèi)存7.2 聯(lián)合體union7.2 聯(lián)合體unionstruct number short i; char ch; float f;0 x0037b00union number short i; char
21、ch; float f;printf(%dn, sizeof(struct number);ichf8個字節(jié)ichf4個字節(jié)printf(%dn, sizeof(union number);聯(lián)合體類型變量占用的存儲空間由占有最大存儲區(qū)的成員決定形式二: 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;聯(lián)合體變量的定義fchifchiab共用體變量定義
22、分配內(nèi)存,長度=最長成員所占字節(jié)數(shù)共用體變量任何時刻只有一個成員存在聯(lián)合體變量引用引用規(guī)那么不能引用共用體變量,只能引用其成員共用體指針名-成員名共用體變量名.成員名(*共用體指針名).成員名共用體變量中起作用的成員是最后一次存放的成員例 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; ()7.2 聯(lián)合體union0 x0037b00同一內(nèi)存單元在每一瞬時只能存放其中一種類型的成員,互相覆蓋 ;起作用的成員是最后一次存放的成員不能作為函數(shù)參數(shù)不能給聯(lián)合體變量名直接賦值 f4個字節(jié)struct person char name20; char sex; int age; union int single;
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國高壓除塵電源市場供需調(diào)查分析及投資策略研究報告
- 2024-2030年中國骨質(zhì)增生治療儀行業(yè)轉(zhuǎn)型升級及投資戰(zhàn)略分析報告
- 2024-2030年中國食品用脂肪替代變性淀粉產(chǎn)業(yè)未來發(fā)展趨勢及投資策略分析報告
- 2024-2030年中國長刻度吸管行業(yè)十三五需求及投資戰(zhàn)略分析報告
- 2024-2030年中國銀金屬含量產(chǎn)業(yè)未來發(fā)展趨勢及投資策略分析報告
- 2024-2030年中國銑床手輪項目可行性研究報告
- 2024-2030年中國鋁合金配行業(yè)供需狀況發(fā)展戰(zhàn)略規(guī)劃分析報告
- 2024-2030年中國銅制壓力容器行業(yè)供需狀況發(fā)展戰(zhàn)略規(guī)劃分析報告
- 2024-2030年中國金黃色珍珠核產(chǎn)業(yè)未來發(fā)展趨勢及投資策略分析報告
- 2024-2030年中國金色磚項目可行性研究報告
- 2024年01月11032成本管理期末試題答案
- 年高考新課標(biāo)I卷語文試題講評課件
- 2024年高中班主任德育工作計劃(5篇)
- 浙江省嘉興市2023-2024學(xué)年高二上學(xué)期1月期末檢測數(shù)學(xué)試題
- 2024-2025學(xué)年語文二年級上冊 部編版期末測試卷 (含答案)
- cecs31-2017鋼制電纜橋架工程設(shè)計規(guī)范
- (完整版)HSE管理體系及措施
- 軍人體型標(biāo)準(zhǔn)對照表
- 淺談吉林省中藥材產(chǎn)業(yè)發(fā)展
- 學(xué)生學(xué)習(xí)評價量表模板
- 圖形找規(guī)律專項練習(xí)60題(有答案)
評論
0/150
提交評論