




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第7章自定義數(shù)據(jù)類型主要內(nèi)容7.1 結(jié)構(gòu)體類型7.2 結(jié)構(gòu)體的使用7.3 單向鏈表7.4 共用體類型7.5 枚舉類型7.6 類型定義typedef概述7.1結(jié)構(gòu)體類型結(jié)構(gòu)體(structure)專門用于描述類型不同、但邏輯意義相關(guān)的數(shù)據(jù)構(gòu)成的聚集。例如,一個(gè)學(xué)生的學(xué)號(hào)、姓名、性別、年齡、成績、家庭地址等項(xiàng),都是這個(gè)學(xué)生的屬性。7.1.1結(jié)構(gòu)體類型概述結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型用途:把不同類型的數(shù)據(jù)組合成一個(gè)整體結(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{intnum;charname[20];chargender;intage;floatscore;charaddr[30];};namenumgenderagescoreaddr2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié)……..結(jié)構(gòu)體類型定義描述結(jié)構(gòu)的組織形式,不分配內(nèi)存。結(jié)構(gòu)體變量的定義一般形式:struct結(jié)構(gòu)體名{
類型標(biāo)識(shí)符
成員名;
類型標(biāo)識(shí)符
成員名;
…………….};struct結(jié)構(gòu)體名
變量名表列;例structstudent{intnum;charname[20];chargender;intage;floatscore;charaddr[30];};
structstudentstu1,stu2;例structstudent{intnum;charname[20];chargender;intage;floatscore;charaddr[30];}stu1,stu2;例struct{intnum;charname[20];chargender;intage;floatscore;charaddr[30];}stu1,stu2;說明結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同類型:不分配內(nèi)存;變量:分配內(nèi)存類型:不能賦值、存取、運(yùn)算;變量:可以結(jié)構(gòu)體可嵌套結(jié)構(gòu)體成員名與程序中變量名可相同,不會(huì)混淆例structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];
structdatebirthday;}stu;numnamebirthdaymonthdayyear7.1.2結(jié)構(gòu)體變量的初始化struct結(jié)構(gòu)體名{
類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;
…………….};struct結(jié)構(gòu)體名
結(jié)構(gòu)體變量={初始數(shù)據(jù)};例structstudent{intnum;charname[20];chargender;intage;charaddr[30];};structstudentstu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};7.1.3結(jié)構(gòu)體變量的引用引用規(guī)則結(jié)構(gòu)體變量一般不能整體引用,只能引用其成員成員(分量)運(yùn)算符優(yōu)先級(jí):1結(jié)合性:從左向右引用方式:結(jié)構(gòu)體變量名.成員名例structstudent{intnum;charname[20];chargender;intage;floatscore;charaddr[30];}stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;stu1.age++;引用方式:結(jié)構(gòu)體變量名.成員名例structstudent{intnum;charname[20];chargender;intage;floatscore;charaddr[30];}stu1,stu2;cout<<stu1;if(stu1==stu2)……..stu1={101,“WanLin”,‘M’,19,87.5,“DaLian”};(╳)(╳)
(╳)引用規(guī)則(續(xù))例structstudent{intnum;charname[20];chargender;intage;floatscore;charaddr[30];}stu1,stu2;stu2=stu1;(√)例structstudent{intnum;charname[20];structdate{intmonth;intday;intyear;}birthday;}stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;可以將一個(gè)結(jié)構(gòu)體變量賦值給另一個(gè)結(jié)構(gòu)體變量結(jié)構(gòu)體嵌套時(shí)逐級(jí)引用7.1.4結(jié)構(gòu)體和指針指向結(jié)構(gòu)體變量的指針定義形式:struct結(jié)構(gòu)體名*結(jié)構(gòu)體指針名;例structstudent*p;使用結(jié)構(gòu)體指針變量引用成員形式存放結(jié)構(gòu)體變量在內(nèi)存的起始地址結(jié)構(gòu)體指針名->成員名(*結(jié)構(gòu)體指針名).成員名結(jié)構(gòu)體變量名.成員名指向運(yùn)算符優(yōu)先級(jí):1結(jié)合方向:從左向右structstudent{intnum;charname[20];chargender;intage;}stu;structstudent*p=&stu;studentstu1;student*p=&stu1;stu1.num=101;(*p).num=101
p->num=101例指向結(jié)構(gòu)體的指針變量voidmain(){structstudent{longintnum;charname[20];chargender;floatscore;}stu1,*p;p=&stu1;stu1.num=89101;strcpy(,"LiLin");
p->gender='M';p->score=89.5;cout<<"No:”<<(*p).num<<“\nname:”<<p->name
<<“\nsex:”<<stu1.gender<<“\nscore:“<<p->score;}7.2 結(jié)構(gòu)體的使用7.2.1結(jié)構(gòu)體與函數(shù)(1)用結(jié)構(gòu)體變量的成員作參數(shù)(2)用結(jié)構(gòu)體變量或結(jié)構(gòu)體數(shù)組作參數(shù)----值傳遞----傳指針或者傳引用【例7-1】結(jié)構(gòu)體作為函數(shù)參數(shù)。#include<iostream>usingnamespacestd;structUser{//定義結(jié)構(gòu)體類型Userintid;charemail[30];chargender;intphone;};//函數(shù)原型聲明,傳值,一般不推薦使用voidupdateUsrEmail(User);voidupdateUsrId(User&);//傳引用voidupdateUsrPhone(User*);//傳值(值為地址)voiddisplayUserInfo(constUser&);//傳引用(常引用)intmain(){ Userusr={1020,"Lisi@",'M',6101010}; cout<<"初始用戶信息為:\n"; displayUserInfo(usr);
updateUsrEmail(usr); cout<<"更新Email之后的用戶信息為:\n"; displayUserInfo(usr); updateUsrId(usr); cout<<"更新Id之后的用戶信息為:\n"; displayUserInfo(usr); updateUsrPhone(&usr); cout<<"更新Phone之后的用戶信息為:\n"; displayUserInfo(usr); return0;}voiddisplayUserInfo(constUser&usr){//形參為常引用變量 cout<<"id="<<usr.id<<"\t"<<"email="<<usr.email<<"\t"; cout<<"gender="<<usr.gender<<"\t"<<"phone="<<usr.phone<<endl;}voidupdateUsrEmail(Userusr)//形參為結(jié)構(gòu)體變量{ usr.email[2]=‘s’; }voidupdateUsrId(User&usr)//形參為引用變量{ usr.id=1601; }voidupdateUsrPhone(User*pUsr)//形參為結(jié)構(gòu)體指針{ pUsr->phone=6101011; }7.2.2結(jié)構(gòu)體與數(shù)組structstudent{intnum;charname[20];chargender;intage;}stu[3]={{10101,"LiLin",'M',18},{10102,"ZhangFun",'M',19}, {10104,"WangMin",'F',20}};指向結(jié)構(gòu)體數(shù)組的指針structstudent{intnum;charname[20];chargender;intage;}stu[3]={{10101,"LiLin",'M',18},{10102,"ZhangFun",'M',19}, {10104,"WangMin",'F',20}};voidmain(){structstudent*p;for(p=stu;p<stu+3;p++)cout<<p->num<<p->name<<p->gender<<p->age;}7.3單向鏈表鏈表是通過指針鏈接在一起的一組數(shù)據(jù)項(xiàng)(稱為“結(jié)點(diǎn)”)。結(jié)點(diǎn)中只有一個(gè)指針域的鏈表稱為單向鏈表。7.3.1new和delete運(yùn)算符new運(yùn)算符使用的一般格式為:
new
類型(初值)delete運(yùn)算符使用的一般格式為:
delete
指針變量;
或者
delete[]
指針變量;例如:float*pf=newfloat(3.14);deletepf;char*pc=newchar[10];delete[]pc;7.3.2單向鏈表的定義簡單的單向鏈表的結(jié)點(diǎn)類型聲明:structNode{intdata;Node*next;};(1)建立鏈表(2)遍歷鏈表獲得鏈表的開始結(jié)點(diǎn):p=head;通過指針找到下一個(gè)結(jié)點(diǎn):p=p->next;訪問當(dāng)前結(jié)點(diǎn)的數(shù)據(jù):p->data利用循環(huán)進(jìn)行遍歷:while(p!=null)voidOutput(constList&list){ cout<<"鏈表:"; Node*pCurNode=list.head; while(pCurNode!=NULL)
{ cout<<pCurNode->data;//輸出結(jié)點(diǎn)的數(shù)據(jù)域
if(pCurNode->next)//如果還有后繼結(jié)點(diǎn)
cout<<"->"; pCurNode=pCurNode->next;
} cout<<endl; }(3)插入結(jié)點(diǎn)(
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑電氣施工方案詳解
- 海洋資源開發(fā)與立體監(jiān)測技術(shù)的融合應(yīng)用
- 石墨烯溫控鞋墊行業(yè)發(fā)展趨勢(shì)預(yù)測
- 節(jié)能環(huán)保行業(yè)未來發(fā)展?jié)摿υu(píng)估
- 網(wǎng)絡(luò)安全技術(shù)防范措施與應(yīng)對(duì)
- 文檔審核與修改的技巧和流程詳解
- 輕量級(jí)數(shù)據(jù)分析框架-洞察及研究
- 2025年制造業(yè)智能制造解決方案研究報(bào)告
- 湖南稅務(wù)高等??茖W(xué)?!缎畔I(yè)英語》2023-2024學(xué)年第一學(xué)期期末試卷
- 遼寧理工職業(yè)大學(xué)《節(jié)目主持藝術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 《選礦廠安全生產(chǎn)標(biāo)準(zhǔn)化評(píng)分辦法》
- 2025年氨水市場需求分析
- 期末試卷(含答案)2024-2025學(xué)年四年級(jí)下冊(cè)數(shù)學(xué)北師大版
- 海洋法知到智慧樹章節(jié)測試課后答案2024年秋中國海洋大學(xué)
- 《客艙安全與應(yīng)急處置》-課件:火災(zāi)的基礎(chǔ)知識(shí)
- 常見藻類圖譜(史上最全版本)
- HSG型工程液壓缸基于ANSYS的有限元分析
- 小區(qū)智能化弱電系統(tǒng)工程清單及報(bào)價(jià)模板
- 上海市高級(jí)人民法院關(guān)于供應(yīng)商與超市之間合同糾紛案件若干問題的解答
- 悼念母親祭文
- 消防安裝工程監(jiān)理細(xì)則
評(píng)論
0/150
提交評(píng)論