C語(yǔ)言程序設(shè)計(jì)(第四版)(微課版)ch10 結(jié)構(gòu)體、共用體與枚舉類型_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第四版)(微課版)ch10 結(jié)構(gòu)體、共用體與枚舉類型_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第四版)(微課版)ch10 結(jié)構(gòu)體、共用體與枚舉類型_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第四版)(微課版)ch10 結(jié)構(gòu)體、共用體與枚舉類型_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)(第四版)(微課版)ch10 結(jié)構(gòu)體、共用體與枚舉類型_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

10.1結(jié)構(gòu)體10.2共用體10.3枚舉類型10.4用typedef定義類型問(wèn)題:學(xué)籍管理需要每個(gè)學(xué)生的下列數(shù)據(jù):學(xué)號(hào)、姓名、性別、年齡、分?jǐn)?shù),請(qǐng)用C語(yǔ)言程序存儲(chǔ)并處理一組學(xué)生的學(xué)籍。

單個(gè)學(xué)生學(xué)籍的數(shù)據(jù)結(jié)構(gòu)學(xué)號(hào)(num):int型姓名(name):char[]型性別(sex):char型年齡(age):int型分?jǐn)?shù)(score):float型

這些信息數(shù)據(jù)之間相互關(guān)聯(lián),適合看作一個(gè)整體。但數(shù)據(jù)類型不一致,僅用已學(xué)數(shù)據(jù)類型無(wú)法解決。需要構(gòu)造一種新的數(shù)據(jù)類型————結(jié)構(gòu)體。10.1結(jié)構(gòu)體10.1.1定義(聲明)結(jié)構(gòu)體類型

struct[結(jié)構(gòu)體名]{

數(shù)據(jù)類型1成員名1;

數(shù)據(jù)類型2成員名2;……

數(shù)據(jù)類型n成員名n;};{}中是組成該結(jié)構(gòu)體的成員。成員類型可以是基本型或構(gòu)造型struct是關(guān)鍵字,不能省略用戶定義的合法標(biāo)識(shí)符??墒?無(wú)名結(jié)構(gòu)體末尾分號(hào)不能省我們來(lái)看一個(gè)結(jié)體構(gòu)學(xué)生(student)的類型定義的語(yǔ)句:structstudent{ int

sno; /*學(xué)號(hào)*/ char

sname[20]; /*姓名*/ char

gender; /*性別*/ int

age; /*年齡*/ float

score; /*成績(jī)*/};注意:結(jié)構(gòu)體類型聲明只是定義了一種新的類型,類似int等類型。它是對(duì)結(jié)構(gòu)的組織形式的描述,系統(tǒng)還沒(méi)分配實(shí)際內(nèi)存空間。10.1.2定義結(jié)構(gòu)體變量有了類型后,就可以定義變量。三種形式:一般形式:struct結(jié)構(gòu)體名{

類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;

…………….};struct結(jié)構(gòu)體名變量名表列;(1)先定義(聲明)結(jié)構(gòu)體類型再定義變量名例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};//結(jié)構(gòu)體類型的聲明

structstudentstudent1,student2;//結(jié)構(gòu)體變量的定義(2)定義結(jié)構(gòu)體類型的同時(shí)定義結(jié)構(gòu)體變量一般形式:struct結(jié)構(gòu)體名{

類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;

…………….}變量名表列;例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;(3)直接定義結(jié)構(gòu)體變量(即不出現(xiàn)結(jié)構(gòu)體名)一般形式:struct{

類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;

…………….}變量名表列;例struct

{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2;namenumsexagescoreaddr2字節(jié)2字節(jié)20字節(jié)1字節(jié)4字節(jié)30字節(jié)……..10.1.3訪問(wèn)結(jié)構(gòu)體成員結(jié)構(gòu)體成員與結(jié)構(gòu)體變量之間的鏈接可以使用成員運(yùn)算符“.”來(lái)建立,該運(yùn)算符又稱為點(diǎn)運(yùn)算符。引用方式:結(jié)構(gòu)體變量名.成員名例structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu1,stu2;stu1.num=10;stu1.score=85.5;10.1.4結(jié)構(gòu)體變量的初始化與其他類型變量一樣,對(duì)結(jié)構(gòu)體變量也可以在定義時(shí)進(jìn)行初始化賦值,但附在變量后面的一組數(shù)據(jù)須用花括號(hào)括起來(lái),其順序應(yīng)與結(jié)構(gòu)體中的成員順序保持一致。例如:structbookbook2={"Pascal","Thomas",300,22.5};structstudent{charnum[15];charname[20];intscore[4];ints;}student1={"2007101010","wang",{89,90,87,80},0};main(){structstudentstudent2;

student2=student1;…….}10.1.5結(jié)構(gòu)體嵌套例structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];structdatebirthday;}student1;numnamebirthdaymonthdayyear結(jié)構(gòu)體成員本身又是一個(gè)結(jié)構(gòu)體類型。例:聲明structstudent類型時(shí),將成員birthday指定為structdate類型結(jié)構(gòu)體嵌套時(shí)逐級(jí)引用student1.birthday.month=3(√)student1.birthday=3(

)10.1.6結(jié)構(gòu)體數(shù)組1、定義結(jié)構(gòu)體數(shù)組:structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};structstudentstu[3];10.1.6結(jié)構(gòu)體數(shù)組2、結(jié)構(gòu)體數(shù)組的初始化:結(jié)構(gòu)數(shù)組[n]={{初值表1},{初值表2},...,{初值表n}};structstudent{intnum;charname[20];charsex;intage;floatscore;};structstudentstu[3]={{10101,"李寧",'M',18,87.5},{10102,"張凡",'M',19,99},{10103,"王敏",'F',20,78.5}};10.1.6結(jié)構(gòu)體數(shù)組結(jié)構(gòu)體數(shù)組元素類似于一個(gè)結(jié)構(gòu)體變量只能對(duì)結(jié)構(gòu)體數(shù)組元素的成員進(jìn)行輸入、輸出或其它基本操作main(){inti;for(i=0;i<3;i++)for(j=0;j<4;j++)

stu[i].s+=stu[i].score[j];

….}3、結(jié)構(gòu)體數(shù)組元素的使用10.1.7結(jié)構(gòu)體指針變量1.指向結(jié)體變量的指針變量structsample{ intx; inty; floatt; charu;};structsamplesam1;structsample*ptr;ptr=&sam1;結(jié)構(gòu)體變量成員的訪問(wèn)常見(jiàn)的有三種方式,以sam1的成員x為例:(1)sam1.x(2)(*ptr).x(3)ptr->x關(guān)于結(jié)構(gòu)體指針變量的使用,我們總結(jié)如下:(1)定義結(jié)構(gòu)體指針變量的一般形式如下:結(jié)構(gòu)體類型名*結(jié)構(gòu)體指針變量名;(2)使結(jié)構(gòu)體指針變量指向結(jié)構(gòu)體類型變量:結(jié)構(gòu)體指針變量名=&結(jié)構(gòu)體變量名(3)通過(guò)指針去訪問(wèn)所指結(jié)構(gòu)體變量的某個(gè)成員時(shí),有如下兩種方法:(*指針變量名).成員名或者指針變量名->成員名2.指向結(jié)構(gòu)體數(shù)組元素的指針變量structsample{ intx; inty; floatt; charu;};structsamplesam[5];structsample*p;p=sam;或p=&sam[0];用指針p去訪問(wèn)結(jié)構(gòu)體數(shù)組的某個(gè)成員,如sam[1].y應(yīng)該是:(*(p+1)).y或(p+1)->y10.1.8結(jié)構(gòu)體與函數(shù)將一個(gè)結(jié)構(gòu)體變量的值傳遞給另一個(gè)函數(shù),有3個(gè)方法:1.用結(jié)構(gòu)體變量的成員作實(shí)參。2.用結(jié)構(gòu)體變量作實(shí)參。3.用指向結(jié)構(gòu)體變量(或數(shù)組)的指針作實(shí)參,將結(jié)構(gòu)體變量(或數(shù)組)的地址傳給形參。值傳遞值傳遞引用傳遞認(rèn)真讀【例10.10】-【例10.12】中的程序10.2共用體union聯(lián)合名{

類型標(biāo)識(shí)符成員名;類型標(biāo)識(shí)符成員名;

…………….};例uniondata{inti;charch;floatf;};類型定義不分配內(nèi)存10.2.1定義共用體類型10.2.2定義共用體變量形式一:uniondata{inti;charch;floatf;}a,b;形式二:uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];形式三:union{inti;charch;floatf;}a,b,c;unionsample{ shortinta; floatb; charc;}sam1;三、共用體變量特點(diǎn):幾個(gè)成員共用一段內(nèi)存。1:共用體變量的內(nèi)存長(zhǎng)度是多少?

最長(zhǎng)成員所占字節(jié)數(shù)。2:共用體變量幾個(gè)成員能同時(shí)存在嗎?

不能。一個(gè)時(shí)刻只有一個(gè)成員存在。否則會(huì)被覆蓋。3:共用體變量成員不能同時(shí)存在,那當(dāng)前起作用的是誰(shuí)?

起作用的成員是最后一次存放的成員共用體和結(jié)構(gòu)體的比較:

例如:結(jié)構(gòu)體變量所占內(nèi)存長(zhǎng)度是各成員占的內(nèi)存長(zhǎng)度之和。每個(gè)成員分別占有其自己的內(nèi)存單元。共用體變量所占的內(nèi)存長(zhǎng)度等于最長(zhǎng)的成員的長(zhǎng)度。structdata{inti;charch;floatf;}a;uniondata{inti;charch;floatf;}a;“結(jié)構(gòu)體”變量a:各成員同時(shí)存在占2+1+4=7個(gè)字節(jié)?!肮灿皿w”變量a任一時(shí)刻只有一個(gè)成員存在占4個(gè)字節(jié)(一個(gè)float占4個(gè)字節(jié))achfiachfi10.2.3訪問(wèn)共用體變量例a.i=1;a.ch=‘a(chǎn)’;a.f=1.5;printf(“%d”,a.i);(

編譯通過(guò),運(yùn)行結(jié)果不對(duì))

引用規(guī)則不能引用共用體變量,只能引用其成員共用體指針名->成員名共用體變量名.成員名(*共用體指針名).成員名uniondata{inti;charch;floatf;};uniondataa,b,c,*p,d[3];a.ia.cha.fp->ip->chp->f(*p).i(*p).ch(*p).fd[0].id[0].chd[0].f共用體變量中起作用的成員是最后一次存放的成員例union{inti;charch;floatf;}a;a=1;(

)

不能在定義共用體變量時(shí)初始化例union{inti;charch;floatf;}a={1,’a’,1.5};(

)

可以用一個(gè)共用體變量為另一個(gè)變量賦值例floatx;union{inti;charch;floatf;}a,b;a.i=1;a.ch=‘a(chǎn)’;a.f=1.5;b=a;(

)x=a.f;(

)10.3枚舉類型10.3.1定義枚舉類型用關(guān)鍵字enum說(shuō)明枚舉類型,其一般形式為:enum枚舉類型名{枚舉常量1,枚舉常量2,…,枚舉常量n};例如:enumcolor_name{red,yellow,blue,white,black};10.3.2定義枚舉變量說(shuō)明了枚舉類型,就可以用于定義枚舉類型變量,其一般形式為:enum枚舉類型名枚舉類型變量名列表;enumcolor_namecolor;定義了枚舉變量color,它們只能取red,yellow,blue,white,black這五個(gè)值之一,如:color=yellowcolor=blue;枚舉元素是常量,在c編譯器中,按定義時(shí)的排列順序取值0、1、2、...。如:color=blue;printf("%d",color);輸出整數(shù)2。在定義枚舉類型時(shí),可以指定枚舉常量的值,如:enumcolor{red,yellow,blue,white=6,black};此時(shí),red的值為0,yellow的值為1,blue的值為2,white的值為6,black的值為7?!纠?0.14】枚舉類型的應(yīng)用。#include<stdio.h>intmain(){ enumcolor_name{red,yellow,blue,white,black}; enumcolor_namecolor; for(color=red;color<=black;color++) switch(color) { casered:printf("red:\t%d\n",red);break; caseyello

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論