




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
會(huì)計(jì)學(xué)1C語(yǔ)言結(jié)構(gòu)體和聯(lián)合體概述C中,結(jié)構(gòu)也是一種數(shù)據(jù)類型,可以使用結(jié)構(gòu)變量,因此,象其它類型的變量一樣,在使用結(jié)構(gòu)變量時(shí)要先對(duì)其定義。定義結(jié)構(gòu)變量的一般格式為:
struct結(jié)構(gòu)名
{類型變量名;類型變量名;
...
}結(jié)構(gòu)變量;第1頁(yè)/共22頁(yè)結(jié)構(gòu)體類型變量結(jié)構(gòu)名是結(jié)構(gòu)的標(biāo)識(shí)符不是變量名。類型為第二節(jié)中所講述的五種數(shù)據(jù)類型(整型、浮點(diǎn)型、字符型、指針型和無(wú)值型)。構(gòu)成結(jié)構(gòu)的每一個(gè)類型變量稱為結(jié)構(gòu)成員,它象數(shù)組的元素一樣,但數(shù)組中元素是以下標(biāo)來(lái)訪問(wèn)的,而結(jié)構(gòu)是按變量名字來(lái)訪問(wèn)成員的。下面舉一個(gè)例子來(lái)說(shuō)明怎樣定義結(jié)構(gòu)變量:第2頁(yè)/共22頁(yè)結(jié)構(gòu)體示例numnamesexageaddr10968Peter.Jman26wuxistructstudent{ intnum; charname[20]; charsex; intage; charaddr[30];};第3頁(yè)/共22頁(yè)結(jié)構(gòu)體類型變量structstring{charname[8];intage;charsex[2];chardepart[20];floatwage1,wage2,wage3,wage4,wage5;}person;或structstring{charname[8];intage;charsex[2];chardepart[20];floatwage1,wage2,wage3,wage4,wage5;};structstringperson;第4頁(yè)/共22頁(yè)結(jié)構(gòu)體類型變量如果需要定義多個(gè)具有相同形式的結(jié)構(gòu)變量時(shí)用這種方法比較方便,它先作結(jié)構(gòu)說(shuō)明,再用結(jié)構(gòu)名來(lái)定義變量。例如:
structstringTianyr,Liuqi,...;
如果省略結(jié)構(gòu)名,則稱之為無(wú)名結(jié)構(gòu),這種情況常常出現(xiàn)在函數(shù)內(nèi)部,用這種結(jié)構(gòu)時(shí)前面的例子變成:
struct{charname[8];intage;charsex[2];chardepart[20];floatwage1,wage2,wage3,wage4,wage5;}Tianyr,Liuqi;第5頁(yè)/共22頁(yè)結(jié)構(gòu)體變量引用結(jié)構(gòu)是一個(gè)新的數(shù)據(jù)類型,因此結(jié)構(gòu)變量也可以象其它類型的變量一樣賦值、運(yùn)算,不同的是結(jié)構(gòu)變量以成員作為基本變量。結(jié)構(gòu)成員的表示方式為:結(jié)構(gòu)變量.成員名如果將"結(jié)構(gòu)變量.成員名"看成一個(gè)整體,則這個(gè)整體的數(shù)據(jù)類型與結(jié)構(gòu)中該成員的數(shù)據(jù)類型相同,這樣就可象前面所講的變量那樣使用。下面這個(gè)例子定義了一個(gè)結(jié)構(gòu)變量,其中每個(gè)成員都從鍵盤接收數(shù)據(jù),然后對(duì)結(jié)構(gòu)中的浮點(diǎn)數(shù)求和,并顯示運(yùn)算結(jié)果,同時(shí)將數(shù)據(jù)以文本方式存入一個(gè)名為wage.dat的磁盤文件中。請(qǐng)注意這個(gè)例子中不同結(jié)構(gòu)成員的訪問(wèn)。第6頁(yè)/共22頁(yè)#include<stdio.h>main(){struct{/*定義一個(gè)結(jié)構(gòu)變量*/
charname[8];intage;charsex[2];chardepart[20];floatwage1,wage2,wage3,wage4,wage5;}a;FILE*fp;floatwage;charc='Y';fp=fopen("wage.dat","w");/*創(chuàng)建一個(gè)文件只寫*/
while(c=='Y'||c=='y')/*判斷是否繼續(xù)循環(huán)*/
{
printf("\nName:");scanf("%s",);/*輸入姓名*/
printf("Age:");scanf("%d",&a.wage);/*輸入年齡*/
printf("Sex:");scanf("%d",a.sex);printf("Dept:");scanf("%s",a.depart);
8第7頁(yè)/共22頁(yè)printf("Wage1:");scanf("%f",&a.wage1);/*輸入工資*/
printf("Wage2:");scanf("%f",&a.wage2);printf("Wage3:");scanf("%f",&a.wage3);printf("Wage4:");scanf("%f",&a.wage4);printf("Wage5:");scanf("%f",&a.wage5);wage=a.wage1+a.wage2+a.wage3+a.wage4+a.wage5;printf("Thesumofwageis6.2f\n",wage);/*顯示結(jié)果*/
fprintf(fp,"%10s%4d%4s%30s%10.2f\n",/*結(jié)果寫入文件*/
,a.age,a.sex,a.depart,wage);while(1){printf("Continue?<Y/N>");c=getchar();if(c=='Y'||c=='y'||c=='N'||c=='n')break;}}fclose(fp);}第8頁(yè)/共22頁(yè)結(jié)構(gòu)數(shù)組結(jié)構(gòu)數(shù)組就是具有相同結(jié)構(gòu)類型的變量集合。假如要定義一個(gè)班級(jí)40個(gè)同學(xué)的姓名、性別、年齡和住址,可以定義成一個(gè)結(jié)構(gòu)數(shù)組。如下所示:struct{charname[8];charsex[2];intage;charaddr[40];}student[40];需要指出的是結(jié)構(gòu)數(shù)組成員的訪問(wèn)是以數(shù)組元素為結(jié)構(gòu)變量的,其形式為:結(jié)構(gòu)數(shù)組元素.成員名例如:student[0].namestudent[30].age實(shí)際上結(jié)構(gòu)數(shù)組相當(dāng)于一個(gè)二維構(gòu)造,第一維是結(jié)構(gòu)數(shù)組元素,每個(gè)元素是一個(gè)結(jié)構(gòu)變量,第二維是結(jié)構(gòu)成員。注意:結(jié)構(gòu)數(shù)組的成員也可以是數(shù)組變量。structa{intm[3][5];floatf;chars[20];}y[4];為了訪問(wèn)結(jié)構(gòu)a中結(jié)構(gòu)變量y[2]的這個(gè)變量,可寫成y[2].m[1][4]第9頁(yè)/共22頁(yè)結(jié)構(gòu)指針結(jié)構(gòu)指針是指向結(jié)構(gòu)的指針。它由一個(gè)加在結(jié)構(gòu)變量名前的"*"操作符來(lái)定義,例如用前面已說(shuō)明的結(jié)構(gòu)定義一個(gè)結(jié)構(gòu)指針如下:structstring{charname[8];charsex[2];intage;charaddr[40];}*student;也可省略結(jié)構(gòu)指針名只作結(jié)構(gòu)說(shuō)明,然后再用下面的語(yǔ)句定義結(jié)構(gòu)指針。structstring*student;第10頁(yè)/共22頁(yè)結(jié)構(gòu)指針使用結(jié)構(gòu)指針對(duì)結(jié)構(gòu)成員的訪問(wèn),與結(jié)構(gòu)變量對(duì)結(jié)構(gòu)成員的訪問(wèn)在表達(dá)方式上有所不同。結(jié)構(gòu)指針對(duì)結(jié)構(gòu)成員的訪問(wèn)表示為:結(jié)構(gòu)指針名->結(jié)構(gòu)成員其中"->"是兩個(gè)符號(hào)"-"和">"的組合,好象一個(gè)箭頭指向結(jié)構(gòu)成員。例如要給上面定義的結(jié)構(gòu)中name和age賦值,可以用下面語(yǔ)句:
strcpy(student->name,"LuG.C");student->age=18;
實(shí)際上,student->name就是(*student).name的縮寫形式。需要指出的是結(jié)構(gòu)指針是指向結(jié)構(gòu)的一個(gè)指針,即結(jié)構(gòu)中第一個(gè)成員的首地址,因此在使用之前應(yīng)該對(duì)結(jié)構(gòu)指針初始化,即分配整個(gè)結(jié)構(gòu)長(zhǎng)度的字節(jié)空間,這可用下面函數(shù)完成,仍以上例來(lái)說(shuō)明如下:
student=(structstring*)malloc(sizeof(structstring));sizeof(structstring)自動(dòng)求取string結(jié)構(gòu)的字節(jié)長(zhǎng)度,malloc()函數(shù)定義了一個(gè)大小為結(jié)構(gòu)長(zhǎng)度的內(nèi)存區(qū)域,然后將其詐地址作為結(jié)構(gòu)指針?lè)祷亍?/p>
注意:
1.結(jié)構(gòu)作為一種數(shù)據(jù)類型,因此定義的結(jié)構(gòu)變量或結(jié)構(gòu)指針變量同樣有局部變量和全程變量,視定義的位置而定。
2.結(jié)構(gòu)變量名不是指向該結(jié)構(gòu)的地址,這與數(shù)組名的含義不同,因此若需要求結(jié)構(gòu)中第一個(gè)成員的首地址應(yīng)該是&[結(jié)構(gòu)變量名]。
3.結(jié)構(gòu)的復(fù)雜形式第11頁(yè)/共22頁(yè)嵌套結(jié)構(gòu)嵌套結(jié)構(gòu)是指在一個(gè)結(jié)構(gòu)成員中可以包括其它一個(gè)結(jié)構(gòu),C允許這種嵌套。例如:下面是一個(gè)有嵌套的結(jié)構(gòu)structstring{charname[8];intage;structaddraddress;}student;其中:addr為另一個(gè)結(jié)構(gòu)的結(jié)構(gòu)名,必須要先進(jìn)行,說(shuō)明,即structaddr{charcity[20];unsignedlongzipcode;chartel[14];}如果要給student結(jié)構(gòu)中成員address結(jié)構(gòu)中的zipcode賦值,則可寫成:student.address.zipcode=200001;每個(gè)結(jié)構(gòu)成員名從最外層直到最內(nèi)層逐個(gè)被列出,即嵌套式結(jié)構(gòu)成員的表達(dá)方式是:結(jié)構(gòu)變量名.嵌套結(jié)構(gòu)變量名.結(jié)構(gòu)成員名其中:嵌套結(jié)構(gòu)可以有很多,結(jié)構(gòu)成員名為最內(nèi)層結(jié)構(gòu)中不是結(jié)構(gòu)的成員名。第12頁(yè)/共22頁(yè)結(jié)構(gòu)體注意事項(xiàng)結(jié)構(gòu)體之間不能加減乘除,但是可以相互賦值普通結(jié)構(gòu)體變量和結(jié)構(gòu)體指針變量作為函數(shù)傳參的問(wèn)題:g1(stutctStudentstu)g2(stutctStudent*stu)見(jiàn)示例:第13頁(yè)/共22頁(yè)聯(lián)合體定義聯(lián)合說(shuō)明和聯(lián)合變量定義與結(jié)構(gòu)十分相似。其形式為:
union聯(lián)合名{數(shù)據(jù)類型成員名;數(shù)據(jù)類型成員名;
...
}聯(lián)合變量名;聯(lián)合表示幾個(gè)變量公用一個(gè)內(nèi)存位置,在不同的時(shí)間保存不同的數(shù)據(jù)類型和不同長(zhǎng)度的變量。下例表示說(shuō)明一個(gè)聯(lián)合a_bc:uniona_bc{inti;charmm;};15第14頁(yè)/共22頁(yè)聯(lián)合體變量在聯(lián)合變量lgc中,整型量i和字符mm公用同一內(nèi)存位置。
當(dāng)一個(gè)聯(lián)合被說(shuō)明時(shí),編譯程序自動(dòng)地產(chǎn)生一個(gè)變量,其長(zhǎng)度為聯(lián)合中最大的變量長(zhǎng)度。
聯(lián)合訪問(wèn)其成員的方法與結(jié)構(gòu)相同。同樣聯(lián)合變量也可以定義成數(shù)組或指針,但定義為指針時(shí),也要用"->"符號(hào),此時(shí)聯(lián)合訪問(wèn)成員可表示成:聯(lián)合名->成員名16第15頁(yè)/共22頁(yè)聯(lián)合結(jié)構(gòu)嵌套另外,聯(lián)合既可以出現(xiàn)在結(jié)構(gòu)內(nèi),它的成員也可以是結(jié)構(gòu)。例如:
struct{intage;char*addr;union{inti;char*ch;}x;}y[10];
若要訪問(wèn)結(jié)構(gòu)變量y[1]中聯(lián)合x的成員i,可以寫成:
y[1].x.i;
若要訪問(wèn)結(jié)構(gòu)變量y[2]中聯(lián)合x的字符串指針ch的第一個(gè)字符可寫成:*y[2].x.ch;
若寫成"y[2].x.*ch;"是錯(cuò)誤的。第16頁(yè)/共22頁(yè)結(jié)構(gòu)和聯(lián)合區(qū)別1.結(jié)構(gòu)和聯(lián)合都是由多個(gè)不同的數(shù)據(jù)類型成員組成,但在任何同一時(shí)刻,聯(lián)合中只存放了一個(gè)被選中的成員,而結(jié)構(gòu)的所有成員都存在。2.對(duì)于聯(lián)合的不同成員賦值,將會(huì)對(duì)其它成員重寫,原來(lái)成員的值就不存在了,而對(duì)于結(jié)構(gòu)的不同成員賦值是互不影響的。
下面舉一個(gè)例了來(lái)加對(duì)深聯(lián)合的理解。main(){union{/*定義一個(gè)聯(lián)合*/
inti;struct{/*在聯(lián)合中定義一個(gè)結(jié)構(gòu)*/
charfirst;
charsecond;
}half;
}number;
numbe
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度展覽項(xiàng)目運(yùn)輸與物流服務(wù)合同
- 二零二五年度北京零售行業(yè)店長(zhǎng)勞動(dòng)合同績(jī)效考核與晉升
- 電力運(yùn)維服務(wù)居間合同范本
- 1000道乘除法練習(xí)題助你輕松掌握技巧
- 乘除法練習(xí)題1000道助你快速掌握技巧
- 數(shù)學(xué)練習(xí)乘除法1000道題目集中訓(xùn)練
- 1000道乘除法練習(xí)題讓數(shù)學(xué)更簡(jiǎn)單
- 2025年廣東珠海斗門區(qū)白藤街道辦事處招聘政府雇員5人高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 創(chuàng)新創(chuàng)業(yè)寵物店計(jì)劃書
- 山東省菏澤市定陶區(qū)實(shí)驗(yàn)中學(xué)2025屆中考生物模擬預(yù)測(cè)題含解析
- 《我的家族史》課件
- 干部考察報(bào)告表()
- 02S404給排水圖集標(biāo)準(zhǔn)
- 湖北省技能高考機(jī)械類模擬試題
- 六年級(jí)勞動(dòng)與技術(shù)下冊(cè)《課程綱要》
- 高空作業(yè)安全方案及應(yīng)急預(yù)案
- 關(guān)于與旅游發(fā)展集團(tuán)成立合資公司的可行性研究報(bào)告
- 第一部分-氣排球運(yùn)動(dòng)介紹課件
- 世界局勢(shì)與主再來(lái)課件
- 思維游戲(小孩都喜歡玩的游戲)教學(xué)內(nèi)容課件
- 儲(chǔ)能技術(shù)課后參考答案梅生偉
評(píng)論
0/150
提交評(píng)論