版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第九章結(jié)構(gòu)體結(jié)構(gòu)體概念定義結(jié)構(gòu)體類型定義和引用結(jié)構(gòu)體類型變量定義和引用結(jié)構(gòu)體類型數(shù)組結(jié)構(gòu)體類型指針概述有時(shí)需要將不同類型的數(shù)據(jù)組合成一個(gè)有機(jī)的整體。如:一個(gè)學(xué)生的信息學(xué)號(num),姓名(name),性別(sex),
年齡(age),成績(score),家庭地址(addr)等。結(jié)構(gòu)體:若干個(gè)數(shù)據(jù)類型不同(也可相同)的數(shù)據(jù)項(xiàng)的一個(gè)組合。結(jié)構(gòu)體是一種數(shù)據(jù)結(jié)構(gòu),它需要用戶根據(jù)自己的需要,按某種規(guī)則定義,即定義結(jié)構(gòu)體類型。定義結(jié)構(gòu)體類型的一般形式:
struct結(jié)構(gòu)體類型名
{成員列表};structstudent{intnum;charname[20];charsex;floatscore;charaddr[30];};struct是關(guān)鍵字,表示是結(jié)構(gòu)體類型,student是結(jié)構(gòu)體類型名。結(jié)構(gòu)體中的各個(gè)成員形式:類型符成員名定義結(jié)構(gòu)體類型變量的方法一、先定義結(jié)構(gòu)體類型再定義變量名structstudent{intnum;charname[20];charsex;floatscore;charaddr[30];};structstudentstudent1,student2;一般形式:struct結(jié)構(gòu)體類型名{成員表列};struct結(jié)構(gòu)體類型名變量名表列;將一個(gè)變量定義為結(jié)構(gòu)體類型,不僅要指定變量為結(jié)構(gòu)體類型,而且要指定為某一特定的結(jié)構(gòu)體類型。二、在定義類型的同時(shí)定義變量structstudent{intnum;charname[20];charsex;floatscore;charaddr[30];}student1,student2;一般形式:struct結(jié)構(gòu)體類型名{成員表列}變量名表列;三、直接定義結(jié)構(gòu)類型變量struct{intnum;charname[20];charsex;floatscore;charaddr[30];}student1,student2;一般形式:struct{成員表列}變量名表列;指定了一個(gè)無名的結(jié)構(gòu)體類型,它沒有名字,顯然不能再以此結(jié)構(gòu)體類型區(qū)定義其他變量。說明:1)類型與變量區(qū)別定義時(shí)先定義結(jié)構(gòu)體類型,然后定義變量。類型不分配空間,變量分配空間。2)結(jié)構(gòu)體的嵌套定義結(jié)構(gòu)體成員也可以是結(jié)構(gòu)體變量。structstudent{intnum;charname[20];intage;structdatebirthday;charaddr[30];}student1;structdate{intmonth;intday;intyear;};結(jié)構(gòu)體類型變量的引用引用形式:結(jié)構(gòu)體變量名.成員名規(guī)則:1)不能將結(jié)構(gòu)體變量作為一個(gè)整體進(jìn)行賦值、輸出,只能對結(jié)構(gòu)體中的各個(gè)成員分別進(jìn)行;但允許將一個(gè)結(jié)構(gòu)體變量直接賦值給另一個(gè)具有相同結(jié)構(gòu)的結(jié)構(gòu)體變量。如:student1.num=100;strcpy(,”zhangsan”);student1=student2;2)如果是嵌套定義,用若干個(gè)成員運(yùn)算符,一級一級地找到最低的一級成員。如:student1.num;;student1.birthday.month;student1.birthday.day;3)結(jié)構(gòu)體成員變量可以像普通變量一樣使用、運(yùn)算(但使用的形式不同)如:student2.score=student1.score;sum=student1.score+student2.score;student1.age++;4)可以引用成員的地址,也可以引用結(jié)構(gòu)體變量的地址。如:scanf(“%d”,&student1.age);例:結(jié)構(gòu)體變量的初始化structstudent{longintnum;charname[20];charsex;charaddr[20];}a={89031L,”李林”,’M’,”123北京路”};intmain(){printf(“學(xué)號:%ld\n姓名:%s\n性別:%c\n住址:%s\n”,a.num,,a.sex,a.addr);}結(jié)構(gòu)體類型變量的初始化結(jié)構(gòu)體數(shù)組(數(shù)組中每個(gè)元素都是一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù))一、結(jié)構(gòu)體數(shù)組的定義與定義結(jié)構(gòu)體變量相似,只需說明其為數(shù)組即可。二、結(jié)構(gòu)體數(shù)組的初始化形式:在定義數(shù)組的后面加上:={初值表列};結(jié)構(gòu)體數(shù)組在內(nèi)存中連續(xù)存放:例:候選人得票的統(tǒng)計(jì)程序。設(shè)三個(gè)候選人,每次輸入一個(gè)得票的候選人的名字,要求最后輸出每個(gè)候選人的得票結(jié)果。指向結(jié)構(gòu)體類型數(shù)據(jù)的指針一、指向結(jié)構(gòu)體變量的指針指向結(jié)構(gòu)體變量的指針:是該變量所占據(jù)的內(nèi)存段的起始地址。定義形式:struct結(jié)構(gòu)類型名*指針名如:structstus,*p=&s;引用方式:
(*p).成員名*p兩側(cè)的括號不可省
p->成員名等價(jià)于:結(jié)構(gòu)體變量.成員名p->n得到p指向的結(jié)構(gòu)體變量中的成員n的值p->n++得到p指向的結(jié)構(gòu)體變量中的成員n的值加1(后加)++p->n得到p指向的結(jié)構(gòu)體變量中的成員n的值加1(先加)intmain(){structstudent{longintnum;charname[20];charsex;floatscore;};structstudentstu_1;structstudent*p;p=&stu_1;stu_1.num=89101L;strcpy(stu_1.name,”李林”);(*p).sex=‘M’;p->score=89.5;printf(“學(xué)號:%ld\n姓名:%s\n成績:%.1f\n”,stu_1.num,p->name,(*p).score);}二、指向結(jié)構(gòu)體數(shù)組的指針注意:p定義為指向結(jié)構(gòu)體的指針,只能指向一個(gè)結(jié)構(gòu)體型數(shù)據(jù),而不能指向結(jié)構(gòu)體的成員。三、用結(jié)構(gòu)體變量和指向結(jié)構(gòu)體的指針作函數(shù)參數(shù)將一個(gè)結(jié)構(gòu)體變量的值傳遞給另一個(gè)函數(shù),有4個(gè)方法:用結(jié)構(gòu)體變量的成員作參數(shù)。用結(jié)構(gòu)體變量作實(shí)參。用指向結(jié)構(gòu)體變量(或數(shù)組)的指針作實(shí)參,將結(jié)構(gòu)體變量(或數(shù)組)的地址傳給形參。用結(jié)構(gòu)體變量的引用作參數(shù)。
例:有一個(gè)結(jié)構(gòu)體變量stu,內(nèi)含學(xué)生學(xué)號、姓名和3門課程的成績。要求在main函數(shù)中賦予值,在另一函數(shù)print中將它們輸出。今用結(jié)構(gòu)體變量作函數(shù)參數(shù)。
#include<stdio.h>
structstudent
{
intnum;
charname[20];
floatscore[3];
};
#include<stdio.h>
#include<string.h>
#defineFORMAT“%d\n%s\n%f\n%f\n%f\n”
intprint(structstudent);
intmain()
{structstudentstu;
stu.num=12345;strcpy(,″LiLin″);stu.score[0]=67.5;stu.score[1]=89;stu.score[2]=78.6;
print(stu);
}
intprint(structstudentstu)
{printf(FORMAT,stu.num,,stu.score[0],stu.score[1],stu.score[2]);
printf(″\n″);}運(yùn)行結(jié)果:12345LiLin67.50000089.00000078.599998將上題改用指向結(jié)構(gòu)體變量的指針作實(shí)參。
#include<stdio.h>
structstudent
{
int
num;
charname[20];
floatscore[3];
}stu={12345,″LiLin″,67.5,89,78.6};
intmain()
{intprint(structstudent*);print(&stu);}intprint(structstudent*p)
{printf(FORMAT,p->num,p->name,
p->score[0],p->score[1],p->score[2]);
printf(″\n″);}運(yùn)行結(jié)果:12345LiLin67.50000089.00000078.599998程序分析:
此程序改用在定義結(jié)構(gòu)體變量s
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 我是消防宣傳安全我先行
- 汽車銷售代銷合同
- 項(xiàng)目維護(hù)服務(wù)中介
- 廣告燈箱投放策略招標(biāo)
- 設(shè)備質(zhì)量保證書保駕護(hù)航
- 無憂安裝嚴(yán)格保證
- 銀行個(gè)人購買消防設(shè)備貸款合同
- 簡易混凝土供應(yīng)合同
- 云服務(wù)器采購協(xié)議書
- 服務(wù)號營銷服務(wù)合同
- 2024年中國電子財(cái)務(wù)公司春季校園招聘3人高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 寒假作業(yè)一年級上冊《數(shù)學(xué)每日一練》30次打卡
- 云南省2022年中考道德與法治真題試卷
- 業(yè)委會解除小區(qū)物業(yè)服務(wù)合同的函
- 食堂食材配送項(xiàng)目投標(biāo)方案(技術(shù)方案)
- 2024-2025學(xué)年北京市海淀區(qū)數(shù)學(xué)三上期末教學(xué)質(zhì)量檢測試題含解析
- 車位進(jìn)行特許權(quán)經(jīng)營服務(wù)投標(biāo)方案(技術(shù)方案)
- 廣告宣傳物料、宣傳欄、大字投標(biāo)方案(技術(shù)方案)
- 綠色信貸政策對企業(yè)ESG表現(xiàn)的影響研究
- NB/T 11446-2023煤礦連采連充技術(shù)要求
- 江蘇省政務(wù)服務(wù)辦事員(五級)理論考試題庫-上(單選題)
評論
0/150
提交評論