版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章結(jié)構(gòu)體與共用體學(xué)習(xí)目標(biāo)掌握結(jié)構(gòu)體類型的基本概念、結(jié)構(gòu)體類型變量的定義及簡(jiǎn)單應(yīng)用?;菊莆战Y(jié)構(gòu)體類型變量參與函數(shù)調(diào)用的方法。了解鏈表,動(dòng)態(tài)存儲(chǔ)空間的申請(qǐng)與釋放了解共用體的概念主要內(nèi)容結(jié)構(gòu)體類型的概念結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體與函數(shù)8.1結(jié)構(gòu)體一.結(jié)構(gòu)體類型的定義
結(jié)構(gòu)體類型是由不同類型的數(shù)據(jù)組合而成的。設(shè)通過(guò)學(xué)號(hào)、姓名、性別、年齡和入學(xué)成績(jī)來(lái)描述一個(gè)學(xué)生:以標(biāo)識(shí)符number(字符串)表示學(xué)號(hào)、name(字符串)表示姓名、sex(字符)表示性別、age(整型)表示年齡和score(整型)表示入學(xué)成績(jī)。由這些不同類型的數(shù)據(jù)組合在一起,描述學(xué)生這一特定類型的對(duì)象。稱這種新的數(shù)據(jù)類型為結(jié)構(gòu)體類型,根據(jù)其所描述的對(duì)象,將其命名為student結(jié)構(gòu)體類型。定義結(jié)構(gòu)體類型的格式:
struct結(jié)構(gòu)體類型名
{
結(jié)構(gòu)體成員表列
};例如:定義student結(jié)構(gòu)體類型的語(yǔ)句:
structstudent{charnumber[6];charname[20];charsex;intage;intscore;};其中,struct為定義結(jié)構(gòu)體類型的關(guān)鍵字,student為所定義的結(jié)構(gòu)體類型名。結(jié)構(gòu)體類型名由用戶命名,但須符合標(biāo)識(shí)符的命名規(guī)則?;ɡㄌ?hào)內(nèi)所定義的變量稱為結(jié)構(gòu)體成員,它們構(gòu)成了所定義的結(jié)構(gòu)體類型的特征。結(jié)構(gòu)體類型student的特征由結(jié)構(gòu)體成員number[]、name[]、sex、age和score共同描述。最后,以“;”表示定義結(jié)構(gòu)體類型語(yǔ)句結(jié)束。
二、結(jié)構(gòu)體變量的定義和引用
student是由用戶定義的數(shù)據(jù)類型,與int、char、float等類型說(shuō)明符一樣,本身不能直接參與數(shù)據(jù)處理,必須通過(guò)定義student類型的變量,才能參與程序運(yùn)行。
定義結(jié)構(gòu)體類型變量的格式為:
struct結(jié)構(gòu)體類型名變量名;
例如,語(yǔ)句:structstudents1,s2;定義了二個(gè)student類型的變量s1和s2,并且由C編譯程序?yàn)閟1、s2分配存儲(chǔ)單元,假定存儲(chǔ)單元的起始地址為2000H,則s1的存儲(chǔ)情況如圖所示:(轉(zhuǎn)后)結(jié)構(gòu)體變量s1在內(nèi)存中的存儲(chǔ)情況成員age占4字節(jié)成員number占6字節(jié)成員sex占1字節(jié)成員score占4字節(jié)成員name占20字節(jié)2000H2005H2006H
2019H201AH201BH201EH201FH2022H定義結(jié)構(gòu)體類型的又一種格式(定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體類型的變量)struct結(jié)構(gòu)體類型名
{
結(jié)構(gòu)體成員表列
}變量名表列;例如:
structstudent{charnumber[6];charname[20];charsex;intage;intscore;}s1,s2;
在定義結(jié)構(gòu)體類型變量的同時(shí)對(duì)其初始化對(duì)結(jié)構(gòu)體類型變量的初始化就是用初始化數(shù)據(jù)對(duì)結(jié)構(gòu)體變量相應(yīng)的成員作初始化?!纠?-1】結(jié)構(gòu)體變量的初始化。執(zhí)行語(yǔ)句:
structstudent{charnumber[6];charname[20];charsex;intage;intscore;}s1={"00001","Peter",'m',19,250},s2={"00002","Betty",'m',18,268};后,結(jié)構(gòu)體變量s1、s2的成員被賦予相應(yīng)的值。例如:s1的成員number[]的值為“00001”,age的值為19,結(jié)構(gòu)體變量s2的成員name[]的值為"Betty"、score的值為268?!纠?-2】假設(shè)學(xué)生的入學(xué)成績(jī)由語(yǔ)文成績(jī)、數(shù)學(xué)成績(jī)和外語(yǔ)成績(jī)構(gòu)成,分別以標(biāo)識(shí)符score1、score2和score3
表示,則可以將入學(xué)成績(jī)定義為結(jié)構(gòu)體類型score,并重新定義結(jié)構(gòu)體類型student:
structscore{intscore1;intscore2;intscore3;};structstudent{charnumber[6];charname[20];charsex;intage;structscorestscore;}s1={"00001","Peter",'m',19,{75,82,93}},s2={"00002","Betty",'m',18,{81,94,93}};先定義結(jié)構(gòu)體類型score結(jié)構(gòu)體類型score的變量stscore是結(jié)構(gòu)體類型student中的成員2.結(jié)構(gòu)體變量的引用在C程序中,不允許引用結(jié)構(gòu)體變量整體,只能通過(guò)結(jié)構(gòu)體變量訪問(wèn)和引用其成員。引用結(jié)構(gòu)體變量成員的格式:結(jié)構(gòu)體變量名.成員名
以【例8-1】中的結(jié)構(gòu)體變量s1和s2為例:的值為字符串常量"Peter",s2.sex的值為字符常量'm'。再以【例8.2】中的結(jié)構(gòu)體變量s1和s2為例:s1.stscore.score1的值為75,s2.stscore.score3的值為93。由s1.stscore訪問(wèn)s1的成員stscore,再由stscore.score1訪問(wèn)stscore的成員score1
說(shuō)明:
在C程序中,結(jié)構(gòu)體變量成員可以參與同類型變量所能進(jìn)行的各種運(yùn)算和操作。【例8-3】參考例8-1中student類型的定義,以表的形式輸出學(xué)生的信息。
#include<stdio.h>
voidmain()
{structstudent{charnumber[6];charname[20];charsex;intage; intscore;}s1={"00001","Peter",'m',19,250},s2={"00002","Betty",'f',18,268};printf("NumberNameSexAgeScore\n");printf("__________________________________\n");printf("%s%s%c%d%d\n",s1.number,,s1.sex,s1.age,s1.score);printf("%s%s%c%d%d\n",s2.number,,s2.sex,s2.age,s2.score);
}三.指向結(jié)構(gòu)體類型數(shù)據(jù)的指針
C編譯程序?yàn)榻Y(jié)構(gòu)體變量分配的存儲(chǔ)區(qū)域的首地址就是結(jié)構(gòu)體變量的指針。在C程序中,使用取地址運(yùn)算符“&”就可以獲得結(jié)構(gòu)體變量的指針。定義結(jié)構(gòu)體類型的指針變量,用于存放結(jié)構(gòu)體變量的指針。
定義結(jié)構(gòu)體類型指針變量的格式為:
struct結(jié)構(gòu)體類型名*指針變量名;例如,定義了結(jié)構(gòu)體類型student以后,下面的語(yǔ)句:structstudents1,s2,*p=&s1;就定義了student類型的二個(gè)結(jié)構(gòu)體變量s1、s2和student類型的指針變量p,并使p指向結(jié)構(gòu)體變量s1的存儲(chǔ)地址。
如果結(jié)構(gòu)體指針變量已經(jīng)指向某個(gè)結(jié)構(gòu)體變量,則可以通過(guò)該指針變量訪問(wèn)其指向的結(jié)構(gòu)體變量的成員,使用格式:指針變量名->成員名例如:p->number等價(jià)于s1.number,p->age等價(jià)于s1.age,p->score等價(jià)于s1.score?!纠?-4】使用結(jié)構(gòu)體指針變量實(shí)現(xiàn)例8-3。
#include<stdio.h>
voidmain(){structstudent{charnumber[6];charname[20];charsex;intage; floatscore;}s1={"00001","Peter",'m',19,250.4},s2={"00002","Betty",'f',18,268.6},*p=&s1;printf("NumberNameSexAgeScore\n");printf("__________________________________\n");printf("%s%s%c%d%f\n",p->number,p->name,p->sex,p->age,p->score);p=&s2;printf("%s%s%c%d%f\n",p->number,p->name,p->sex,p->age,p->score);}四.結(jié)構(gòu)體數(shù)組1.結(jié)構(gòu)體數(shù)組的定義
在定義了結(jié)構(gòu)體類型后,可以定義結(jié)構(gòu)體數(shù)組。
定義結(jié)構(gòu)體數(shù)組的格式:
struct結(jié)構(gòu)體類型名數(shù)組名[元素個(gè)數(shù)];
例如:語(yǔ)句:
structstudents[10];定義了一個(gè)有10個(gè)元素的student類型的數(shù)組s[],數(shù)組的每個(gè)元素都是student類型的結(jié)構(gòu)體變量。也可以在定義結(jié)構(gòu)體類型數(shù)組的同時(shí)對(duì)數(shù)組元素初始化。在C程序中,通過(guò)數(shù)組元素名s[i](i=0、1、2、……9)引用相應(yīng)的結(jié)構(gòu)體成員。
【例8-5】參考例8-2中student類型的定義,從鍵盤輸入學(xué)生信息,輸出學(xué)生的姓名和成績(jī)總分。#include<stdio.h>voidmain(){inti;structscore{intscore1;intscore2;intscore3;};structstudent{charname[10];charsex;intage;structscorestscore;}s[2];for(i=0;i<2;i++){printf("PleaseInputnameandscores\n");scanf("%s",s[i].name);scanf("%d",&s[i].stscore.score1);scanf("%d",&s[i].stscore.score2);scanf("%d",&s[i].stscore.score3);}for(i=0;i<2;i++)printf("%s:TotalScoreis%d\n",s[i].name,(s[i].stscore.score1+s[i].stscore.score2+s[i].stscore.score3));}2.結(jié)構(gòu)體數(shù)組的指針
結(jié)構(gòu)體數(shù)組的指針就是結(jié)構(gòu)體數(shù)組存儲(chǔ)區(qū)域的首地址??梢杂媒Y(jié)構(gòu)體類型的指針變量指向該地址。例如,執(zhí)行語(yǔ)句:structstudent{charnumber[6];charname[20];charsex;intage;intscore;}s[5],*p=s;
后,指針變量p指向結(jié)構(gòu)體數(shù)組s[]的首地址。則:p指向s[0],p+1指向s[1],p+2指向s[2]……
【例8-6】用指針變量實(shí)現(xiàn)例8-5的功能。
#include<stdio.h>main(){inti;structscore{intscore1;intscore2;intscore3;};structstudent{charname[10];charsex;intage;structscorestscore;}s[2],*p=s;for(i=0;i<2;i++){printf("PleaseInputnameandscores\n");scanf("%s",(p+i)->name);scanf("%d",&((p+i)->stscore.score1));scanf("%d",&((p+i)->stscore.score2));scanf("%d",&((p+i)->stscore.score3));}for(p=s;p<s+2;p++)printf("%s:TotalScoreis%d\n",p->name,(p->stscore.score1+p->stscore.score2+p->stscore.score3));}此處的括號(hào)不可少
此處的括號(hào)不可少
五.結(jié)構(gòu)體與函數(shù)結(jié)構(gòu)體變量、結(jié)構(gòu)體成員和結(jié)構(gòu)體類型的指針變量都能夠作為形參或?qū)崊⑴c函數(shù)調(diào)用。在函數(shù)調(diào)用過(guò)程中,遵循和基本數(shù)據(jù)類型變量相同的規(guī)則。【例8-7】通過(guò)函數(shù)調(diào)用實(shí)現(xiàn)例8-5的功能。#include<stdio.h>
structscore{intscore1;intscore2;intscore3;};structstudent{charname[10];charsex;intage;structscorestscore;};inttotal(structstudentstud);(轉(zhuǎn)后)形參為student類型的結(jié)構(gòu)體變量stud
main(){inti;structstudents[2];for(i=0;i<2;i++){printf("PleaseInputnameandscores\n");scanf("%s",s[i].name);scanf("%d",&s[i].stscore.score1);scanf("%d",&s[i].stscore.score2);scanf("%d",&s[i].stscore.score3);}for(i=0;i<2;i++)printf("%s:TotalScoreis%d\n",s[i].name,total(s[i]));}inttotal(structstudentstud){return(stud.stscore.score1+stud.stscore.score2+stud.stscore.score3);}(接前)實(shí)參為student類型的結(jié)構(gòu)體變量s[i]
【例8-8】結(jié)構(gòu)體數(shù)組指針參與函數(shù)調(diào)用的例子。本例程序?qū)崿F(xiàn)從鍵盤輸入學(xué)生學(xué)號(hào),經(jīng)搜索后輸出該學(xué)生信息。#include<stdio.h>
#include<string.h>structstudent
{charnumber[6];
charname[20];charsex;intage;intscore;};
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)花枝木產(chǎn)業(yè)市場(chǎng)現(xiàn)狀調(diào)研與前景規(guī)模預(yù)測(cè)報(bào)告
- 2025-2030年中國(guó)箱紙板行業(yè)市場(chǎng)競(jìng)爭(zhēng)格局展望及投資策略分析報(bào)告
- 二零二五年度建筑工程項(xiàng)目環(huán)保驗(yàn)收居間合同范本3篇
- 2025-2030年中國(guó)碳膜電位器市場(chǎng)十三五規(guī)劃與投資戰(zhàn)略研究報(bào)告
- 2025-2030年中國(guó)硫糖鋁行業(yè)市場(chǎng)發(fā)展現(xiàn)狀規(guī)劃研究報(bào)告
- 2025-2030年中國(guó)電源適配器行業(yè)未來(lái)發(fā)展戰(zhàn)略及投資規(guī)劃研究報(bào)告
- 2025-2030年中國(guó)玻璃機(jī)械產(chǎn)業(yè)市場(chǎng)運(yùn)行狀況及投資前景趨勢(shì)分析報(bào)告
- 2025-2030年中國(guó)沐浴露行業(yè)運(yùn)行動(dòng)態(tài)及前景趨勢(shì)預(yù)測(cè)報(bào)告
- 2025年度毛竹種植基地租賃與技術(shù)服務(wù)合同4篇
- 2025年物業(yè)服務(wù)合同續(xù)簽及變更范本模板3篇
- GB/T 12914-2008紙和紙板抗張強(qiáng)度的測(cè)定
- GB/T 1185-2006光學(xué)零件表面疵病
- ps6000自動(dòng)化系統(tǒng)用戶操作及問(wèn)題處理培訓(xùn)
- 家庭教養(yǎng)方式問(wèn)卷(含評(píng)分標(biāo)準(zhǔn))
- 城市軌道交通安全管理課件(完整版)
- 線纜包覆擠塑模設(shè)計(jì)和原理
- TSG ZF001-2006 安全閥安全技術(shù)監(jiān)察規(guī)程
- 部編版二年級(jí)語(yǔ)文下冊(cè)《蜘蛛開店》
- 鍋爐升降平臺(tái)管理
- 200m3╱h凈化水處理站設(shè)計(jì)方案
- 個(gè)體化健康教育記錄表格模板1
評(píng)論
0/150
提交評(píng)論