資源描述:
《結(jié)構(gòu)體與共用體》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、《C程序設(shè)計(jì)》作者:譚浩強(qiáng)主講:小甲魚第十章結(jié)構(gòu)體與共用體目錄概述定義結(jié)構(gòu)體類型變量的方法結(jié)構(gòu)體變量的引用結(jié)構(gòu)體變量的初始化結(jié)構(gòu)體數(shù)組指向結(jié)構(gòu)體類型數(shù)據(jù)的指針用指針處理鏈表共用體枚舉類型用typedef定義類型概述問題定義:有時需要將不同類型的數(shù)據(jù)組合成一個有機(jī)的整體,以便于引用。如:一個學(xué)生有學(xué)號/姓名/性別/年齡/地址等屬性intnum;charname[20];charsex;intage;intcharaddr[30];numnamesexageaddr007JaneM24Beijing概述定義一個結(jié)構(gòu)的一般形式為:struct結(jié)構(gòu)名{成員表列};成員表列由若干個成員組成,
2、每個成員都是該結(jié)構(gòu)的一個組成部分。對每個成員也必須作類型說明,其形式為:類型說明符成員名;概述structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}定義結(jié)構(gòu)體類型變量的方法可以采取以下3種方法定義結(jié)構(gòu)體類型變量:(1)先聲明結(jié)構(gòu)體類型再定義變量名例如:structstudentstudent1,student2;
3、
4、
5、
6、類型名結(jié)構(gòu)體變量名變量名定義了student1和student2為structstudent類型的變量,即它們具有structstudent類型的結(jié)構(gòu).定義結(jié)構(gòu)體類型變量的方
7、法structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1,student2在定義了結(jié)構(gòu)體變量后,系統(tǒng)會為之分配內(nèi)存單元。例如:student1和student2在內(nèi)存中各占?個字節(jié)。(4+20+1+4+4+30=67)。定義結(jié)構(gòu)體類型變量的方法(2)在聲明類型的同時定義變量這種形式的定義的一般形式為:struct 結(jié)構(gòu)體名{成員表列}變量名表列;例如:structstudent{intnum;charname[20];charsex;intage;floatscore;cha
8、raddr[30];}student1,student2;定義結(jié)構(gòu)體類型變量的方法(3)直接定義結(jié)構(gòu)體類型變量其一般形式為:struct{成員表列}變量名表列;即不出現(xiàn)結(jié)構(gòu)體名。~看圖下定義~birthdayNumnamesexageaddrMonthdayyear結(jié)論:這是一個嵌套的定義~看圖下定義~首先定義一個結(jié)構(gòu)date,由month(月)、day(日)、year(年)三個成員組成。在定義并說明變量boy1和boy2時,其中的成員birthday被說明為data結(jié)構(gòu)類型。成員名可與程序中其它變量同名,互不干擾。structdate{intmonth;intday;intyear
9、;};struct{intnum;charname[20];charsex;structdatebirthday;floatscore;}boy1,boy2;例子01結(jié)構(gòu)體變量的引用在定義了結(jié)構(gòu)體變量以后,當(dāng)然可以引用這個變量。但應(yīng)遵守以下規(guī)則:(1)不能將一個結(jié)構(gòu)體變量作為一個整體進(jìn)行輸入和輸出。例如:打印student1的各個變量的值??梢赃@樣嗎?printf(″%d,%s,%c,%d,%f,%\n″,student1);結(jié)構(gòu)體變量的引用正確引用結(jié)構(gòu)體變量中成員的方式為:結(jié)構(gòu)體變量名.成員名student1.num表示student1變量中的num成員,即student1的num
10、(學(xué)號)項(xiàng)??梢詫ψ兞康某蓡T賦值,例如:student1.num=100;“.”是成員(分量)運(yùn)算符,它在所有的運(yùn)算符中優(yōu)先級最高,因此可以把student1.num作為一個整體來看待。上面賦值語句的作用是將整數(shù)100賦給student1變量中的成員num。結(jié)構(gòu)體變量的引用例子01:example02.c(2)如果成員本身又屬一個結(jié)構(gòu)體類型,則要用若干個成員運(yùn)算符,一級一級地找到最低的一級的成員。只能對最低級的成員進(jìn)行賦值或存取以及運(yùn)算。對上面定義的結(jié)構(gòu)體變量student1,可以這樣訪問各成員:student1.numstudent1.birthday.month結(jié)構(gòu)體變量的引用(
11、3)對結(jié)構(gòu)體變量的成員可以像普通變量一樣進(jìn)行各種運(yùn)算(根據(jù)其類型決定可以進(jìn)行的運(yùn)算)。例如:student2.score=student1.score;sum=student1.score+student2.score;student1.age++;++student2.age;結(jié)構(gòu)體變量的引用(4)可以引用結(jié)構(gòu)體變量成員的地址,也可以引用結(jié)構(gòu)體變量的地址。例子03:example03.c但不能用以下語句整體讀入結(jié)構(gòu)體變量:scanf(″%d,%s,%c,