ch11 結(jié)構(gòu)體與共用體llh_第1頁
ch11 結(jié)構(gòu)體與共用體llh_第2頁
ch11 結(jié)構(gòu)體與共用體llh_第3頁
ch11 結(jié)構(gòu)體與共用體llh_第4頁
ch11 結(jié)構(gòu)體與共用體llh_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第第頁ch11結(jié)構(gòu)體與共用體llhc語言

第十一章結(jié)構(gòu)體與共用體本章主要內(nèi)容:本章主要內(nèi)容1.結(jié)構(gòu)體定義、運用、初始化結(jié)構(gòu)體定義、結(jié)構(gòu)體定義運用、2.結(jié)構(gòu)體數(shù)組和結(jié)構(gòu)體指針結(jié)構(gòu)體數(shù)組和結(jié)構(gòu)體指針3.單鏈表操作及其應用單鏈表操作及其應用4.共用體、枚舉類型和用共用體、共用體枚舉類型和用typedef定義類型定義類型

c語言

11.1結(jié)構(gòu)體結(jié)構(gòu)體是一種構(gòu)造數(shù)據(jù)類型用途:把不同類型的數(shù)據(jù)組合成一個整體自定義數(shù)據(jù)類型結(jié)構(gòu)體類型定義合法標識符可省:無名結(jié)構(gòu)體成員類型可以是基本型或構(gòu)造型

struct是關鍵字,是關鍵字,不能省略

struct[結(jié)構(gòu)體名結(jié)構(gòu)體名]結(jié)構(gòu)體名{成員名;類型標識符成員名;成員名;類型標識符成員名;…………….};

c語言

num

2字節(jié)字節(jié)

例structstudent{intnum;charname[20];charse*;intage;floatscore;charaddr[30];};留意有;號留意有號

namese*agescore

20字節(jié)字節(jié)1字節(jié)字節(jié)2字節(jié)字節(jié)4字節(jié)字節(jié)

…..…..

addr

30字節(jié)字節(jié)

結(jié)構(gòu)體類型定義描述結(jié)構(gòu)結(jié)構(gòu)體類型定義描述結(jié)構(gòu)類型定義的組織形式,不安排內(nèi)存的組織形式不安排內(nèi)存student是類型名不是變量是類型名,不是變量

c語言

11.2結(jié)構(gòu)體變量的定義法1.先定義結(jié)構(gòu)體類型,再定義結(jié)構(gòu)體變量struct結(jié)構(gòu)體名{成員名;類型標識符成員名;成員名;類型標識符成員名;例#define…………….STUDENTstructstudent};;structstudentSTUDENTstruct結(jié)構(gòu)體名變量名表列;變量名表列;

一般形式:

{intnum;intnum;charname[20];charname[20];charse*;charse*;intage;intage;floatscore;floatscore;charaddr[30];charaddr[30];};};STUDENTstu1,stu2;structstudentstu1,stu2;{

c語言

法2.定義結(jié)構(gòu)體類型的同時定義結(jié)構(gòu)體變量一般形式:struct結(jié)構(gòu)體名{成員名;類型標識符成員名;成員名;類型標識符成員名;…………….}變量名表列;變量名表列;變量名表列

例structstudent{intnum;charname[20];charse*;intage;floatscore;charaddr[30];}stu1,stu2;

c語言

法3.徑直定義結(jié)構(gòu)體變量一般形式:struct{成員名;類型標識符成員名;成員名;類型標識符成員名;…………….}變量名表列;變量名表列;變量名表列用無名結(jié)構(gòu)體徑直定義變量只能一次

例struct{intnum;charname[20];charse*;intage;floatscore;charaddr[30];}stu1,stu2;

c語言

說明結(jié)構(gòu)體類型與結(jié)構(gòu)體變量概念不同類型:編譯時不安排內(nèi)存;類型編譯時不安排內(nèi)存;編譯時不安排內(nèi)存類型:不能賦值存取、運算;不能賦值、類型不能賦值、存取、運算變量:安排內(nèi)存變量安排內(nèi)存變量:可以變量可以

結(jié)構(gòu)體可嵌套定義結(jié)構(gòu)體成員名與程序中變量名可相同,結(jié)構(gòu)體成員

名與程序中變量名可相同,不會混淆例struct結(jié)構(gòu)體類型及變量的作用域與生存期date{例structstudentintmonth;{intnum;intday;intcharname[20];year;structdate};birthdayintmonth;struct{studentnumnamebirthdayintday;yearnumnamemonthday{intnum;monthdayyearintyear;charname[20];}birthday;structdatebirthday;}stu;}stu;

c語言

11.3結(jié)構(gòu)體變量的引用引用規(guī)章結(jié)構(gòu)體變量不能整體引用,只能引用變量成員

引用方式:結(jié)構(gòu)體變量名.成員名例struct成員(份量)運算符student可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)體變量可以將一個結(jié)構(gòu)體變量賦值給另一個結(jié)構(gòu)體變量例structstudent{stu1.num=10;intnum;優(yōu)先級:結(jié)構(gòu)體嵌套時逐級引用結(jié)構(gòu)體嵌套時逐級引用1{intnum;例structstudent結(jié)合性:從左向右{charname[20];stu1,stu1.numnum;結(jié)構(gòu)體變量地址與成員地址不同:structname[20];intse*;例結(jié)構(gòu)體變量地址與成員地址不同charstudentcharcharname[20];stu1.score=85.5;student例structintnum;{charse*;intcharse*;age;printf(“%d,%s,%c,%d,%f,%s\n”,stu1);()if(stu1==stu2){intnum;charname[20];stu1.birthday.month=12;intage;floatscore;……..()stu1.score+=stu2.score;charscore;name[20];intage;structdatecharaddr[30];stu1.age++;floatfloatscore;charse*;{intmonth;charaddr[30];stu1={101,“WanLin”,‘M’,19,87.5,“DaLian”};()}stu1,stu2;addr[30];charbirthdayintage;int}stu1,stu2;day;numnamefloatscore;}stu1,stu2;monthdayyearintyear;stu2=stu1;()charaddr[30];}birthday;}stu1,stu2;}stu1,stu2;

c語言

11.4結(jié)構(gòu)體變量的初始化形式一:struct結(jié)構(gòu)體名{成員名;類型標識符成員名;成員名;類型標識符成員名;…………….};;struct結(jié)構(gòu)體名結(jié)構(gòu)體變量初始數(shù)據(jù);結(jié)構(gòu)體變量={初始數(shù)據(jù)初始數(shù)據(jù)};

例structstudent{intnum;charname[20];charse*;intage;charaddr[30];};structstudentstu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};

c語言

形式二:struct結(jié)構(gòu)體名{成員名;類型標識符成員名;成員名;類型標識符成員名;…………….}結(jié)構(gòu)體變量初始數(shù)據(jù)結(jié)構(gòu)體變量={初始數(shù)據(jù)結(jié)構(gòu)體變量初始數(shù)據(jù)};

例structstudent{intnum;charname[20];charse*;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};

c語言

形式三:struct{成員名;類型標識符成員名;成員名;類型標識符成員名;…………….}結(jié)構(gòu)體變量初始數(shù)據(jù);結(jié)構(gòu)體變量={初始數(shù)據(jù)結(jié)構(gòu)體變量初始數(shù)據(jù)};

例struct{intnum;charname[20];charse*;intage;charaddr[30];}stu1={112,“WangLin”,‘M’,19,“200BeijingRoad”};

c語言

11.5結(jié)構(gòu)體數(shù)組1.結(jié)構(gòu)體數(shù)組的定義三種形式:形式一:形式一:structstudent形式二:形式二:{studentst

ructintnum;形式三:形式三charname[20];{intnum;structcharse*;charname[20];{intnum;intage;charse*;};charname[20];intage;structcharse*;stu[2];student}stu[2];intage;}stu[2];num25Bnamese*agenumnamese*agestu[1]stu[0]

c語言

2.結(jié)構(gòu)體數(shù)組初始化3.結(jié)構(gòu)體數(shù)組引用:點記法引用方式:結(jié)構(gòu)體數(shù)組名[下標下標]引用方式順次初始化:分行初始化:分行初始化:結(jié)構(gòu)體數(shù)組名下標.成員名例structstudentstructstudentstructstudent例structnum;{int{intnum;{{intnum;intnum;charname[20];charname[20];stu[1].age++;charname[20];charname[20];charse*;structstudentcharse*;charse*;charse*;intintage;{intage;num;intage;intcharname[20];age;}stu[]={{……},{……},{……}};};};}stu[]={{……},{……},{……}};charse*;structstudentstu[]={100,“WangLin”,‘M’,20,structstudentstu[]={{100,“WangLin”,‘M’,20},intage;101,“LiGang”,‘M’,19,{101,“Listrcpy(stu[0].name,”ZhaoDa”);Gang”,‘M’,19},}stu[3];110,“LiuYan”,‘F’,19}};{110,“LiuYan”,‘F’,19};全部初始化時維數(shù)可省

c語言

例11.1統(tǒng)計侯選人選票structpersonname{charname[20];Liintcount;Zhang}leader[3]={“Li”,0,“Zhang”,0,”Wang“,0};main()Wang{inti,j;charleader_name[20];for(i=1;i=10;i++){scanf(%s,leader_name);for(j=0;j3;j++)if(strcmp(leader_name,leader[j].name)==0)leader[j].count++;}for(i=0;i3;i++)printf(%5s:%d\n,leader[i].name,leader[i].count);}count000

c語言

11.6結(jié)構(gòu)體和指針1.指向結(jié)構(gòu)體變量的指針main()定義形式:struct結(jié)構(gòu)體名*結(jié)構(gòu)體指針名;{structstudent{longintstudent例structnum;*p;charname[20];運用結(jié)構(gòu)體指針變量引用成員形式structstudent存放結(jié)構(gòu)體變量在內(nèi)存的起始地址pcharse*;num{intnum;(*結(jié)構(gòu)體指針名n;score;結(jié)構(gòu)體指針名成員名結(jié)構(gòu)體指針名).成員名結(jié)構(gòu)體指針名-成員名結(jié)構(gòu)體變量名.成員名結(jié)構(gòu)體指針名成員名結(jié)構(gòu)體變量名成員名structstudentnamestu1;例intfloatcharname[20];stu}stu_1,*p;structstudentse**p=stu1;int*p=n;例p=stu_1;charse*;指向結(jié)構(gòu)體的指針變量*p=10;指向運算符stu1.num=101;age(*p).num=101;n=10intage;stu_1.num=89101;1}stu;優(yōu)先級:strcpy(stu_,LiLin);結(jié)合方向:從左向右structstudent*p=stu;p-se*='M';p-score=89.5;printf(\nNo:%ld\nname:%s\nse*:%c\nscore:%f\n,(*p).num,p-name,stu_1.se*,p-score);}

c語言

2.指向結(jié)構(gòu)體數(shù)組的指針例11.2指向結(jié)構(gòu)體數(shù)組的指針structstudentpnum{intnum;namecharname[20];stu[0]se*charse*;agep+1intage;}stu[3]={{10101,LiLin,'M',18},stu[1]{10102,ZhangFun,'M',19},{10104,WangMin,'F',20}};main()stu[2]{structstudent*p;for(p=stu;pstu+3;p++)printf(%d%s%c%d\n,p-num,p-name,p-se*,p-age);}

c語言

3.用指向結(jié)構(gòu)體的指針作函數(shù)參

數(shù)用結(jié)構(gòu)體變量的成員作參數(shù)值傳遞用結(jié)構(gòu)體變量的成員作參數(shù)值傳遞用結(jié)構(gòu)體變量作參數(shù)多值傳遞多值傳遞,用結(jié)構(gòu)體變量作參數(shù)多值傳遞,效率低用指向結(jié)構(gòu)體變量或數(shù)組的指針作參數(shù)地址傳遞用指向結(jié)構(gòu)體變量或數(shù)組的指針作參數(shù)地址傳遞

4.用結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)地址傳遞地址傳遞

c語言

用結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù):一個班級學號姓名,成果輸入輸出一個班級學號,姓名成果輸入輸出.例11.3用結(jié)構(gòu)體數(shù)組作函數(shù)參數(shù)一個班級學號姓名成果輸入輸出voiddin(structstuds[],intn){inti;for(i=0;in;i++)scanf(%d%s%f,s[i].no,s[i].name,s[i].score);}改成指針呢?改成指針呢voidprt(structstuds[],intn){structstud*p;inti;for(p=s;ps+n;p++)printf(%d%s%f\n,p-no,p-name,p-score);}

structstud{intno;charname[20];floatscore;};voiddin(structstuds[],intn);voidprt(structstuds[],intn);main(){structstudst1[40],*p;inti;din(st1,40);prt(st1,40);}

c語言

11.7單鏈表1.單鏈表概念

structstud{intno;floatscore;structstud*ne*t;};

head

noscorene*t

noscorene*t

no

...

scoreNU

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論