C語(yǔ)言中結(jié)構(gòu)體的使用_第1頁(yè)
C語(yǔ)言中結(jié)構(gòu)體的使用_第2頁(yè)
C語(yǔ)言中結(jié)構(gòu)體的使用_第3頁(yè)
C語(yǔ)言中結(jié)構(gòu)體的使用_第4頁(yè)
C語(yǔ)言中結(jié)構(gòu)體的使用_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

人生充滿(mǎn)著期待,夢(mèng)想連接著未來(lái)。什么是結(jié)構(gòu)體?簡(jiǎn)單的來(lái)說(shuō)結(jié)構(gòu)體就是一個(gè)可以包含不同數(shù)據(jù)類(lèi)型的一個(gè)結(jié)構(gòu)它是一種可以自己定義的數(shù)據(jù)類(lèi)型它的特點(diǎn)和數(shù)組主要有兩點(diǎn)不同首先結(jié)構(gòu)體可以在一個(gè)結(jié)構(gòu)中聲明不同的數(shù)據(jù)類(lèi)型第二相同結(jié)構(gòu)的結(jié)構(gòu)體變量是可以相互賦值的而數(shù)組是做不到的因?yàn)閿?shù)組是單一數(shù)據(jù)類(lèi)型的數(shù)據(jù)集合它本身不是數(shù)據(jù)類(lèi)型(而結(jié)構(gòu)體是)數(shù)組名稱(chēng)是常量指針?biāo)圆豢梢宰鰹樽笾颠M(jìn)行運(yùn)算所以數(shù)組之間就不能通過(guò)數(shù)組名稱(chēng)相互復(fù)制了即使數(shù)據(jù)類(lèi)型和數(shù)組大小完全相同定義結(jié)構(gòu)體使用struct修飾符例如:structtest{floata;intb;};上面的代碼就定義了一個(gè)名為test的結(jié)構(gòu)體它的數(shù)據(jù)類(lèi)型就是test它包含兩個(gè)成員a和b成員a的數(shù)據(jù)類(lèi)型為浮點(diǎn)型成員b的數(shù)據(jù)類(lèi)型為整型由于結(jié)構(gòu)體本身就是自定義的數(shù)據(jù)類(lèi)型定義結(jié)構(gòu)體變量的方法和定義普通變量的方法一樣testpnl;這樣就定義了一test結(jié)構(gòu)體數(shù)據(jù)類(lèi)型的結(jié)構(gòu)體變量pnl結(jié)構(gòu)體成員的訪問(wèn)通過(guò)點(diǎn)操作符進(jìn)行pn1.a=10就對(duì)結(jié)構(gòu)體變量pnl的成員a進(jìn)行了賦值操作注意:結(jié)構(gòu)體生命的時(shí)候本身不占用任何內(nèi)存空間只有當(dāng)你用你定義的結(jié)構(gòu)體類(lèi)型定義結(jié)構(gòu)體變量的時(shí)候計(jì)算機(jī)才會(huì)分配內(nèi)存結(jié)構(gòu)體同樣是可以定義指針的那么結(jié)構(gòu)體指針就叫做結(jié)構(gòu)指針結(jié)構(gòu)指針通過(guò)->符號(hào)來(lái)訪問(wèn)成員下面我們就以上所說(shuō)的看一個(gè)完整的例子:#include<iostream>#include<string>usingnamespacestd;structtest//定義一個(gè)名為test的結(jié)構(gòu)體{inta;//定義結(jié)構(gòu)體成員aintb;//定義結(jié)構(gòu)體成員b};voidmain(){testpn1;//定義結(jié)構(gòu)體變量pn1testpn2;//定義結(jié)構(gòu)體變量pn2pn2.a=10;//通過(guò)成員操作符.給結(jié)構(gòu)體變量pn2中的成員a賦值pn2.b=3;//通過(guò)成員操作符.給結(jié)構(gòu)體變量pn2中的成員b賦值pn1=pn2;//把pn2中所有的成員值復(fù)制給具有相同結(jié)構(gòu)的結(jié)構(gòu)體變量pn1cout<<pn1.a<<”|"<<pn1.b<<endl;cout<<pn2.a<<”|"<<pn2.b<<endl;test*point;//定義結(jié)構(gòu)指針point=&pn2;//指針指向結(jié)構(gòu)體變量pn2的內(nèi)存地址cout<<pn2.a<<”|"<<pn2.b<<endl;point->a=99;//通過(guò)結(jié)構(gòu)指針修改結(jié)構(gòu)體變量pn2成員a的值cout<<pn2.a<<”|"<<pn2.b<<endl;cout<<point->a<<"|"<<point->b<<endl;cin.get();}總之結(jié)構(gòu)體可以描述數(shù)組不能夠清晰描述的結(jié)構(gòu)它具有數(shù)組所不具備的一些功能特性結(jié)構(gòu)體變量是如何作為函數(shù)參數(shù)進(jìn)行傳遞的#include<iostream>#include<string>usingnamespacestd;structtest{charname[10];floatsocre;};voidprint_score(testpn)//以結(jié)構(gòu)變量進(jìn)行傳遞{cout<<<<”|"<<pn.socre<<endl;}voidprint_score(test*pn)//—結(jié)構(gòu)指針作為形參{cout<<pn->name<<"|"<<pn->socre<<endl;}voidmain(){testa[2]={{"marry”88.5}{"jarck"98.5}};intnum=sizeof(a)/sizeof(test);for(inti=0;i<num;i++){print_score(a[i]);}for(inti=0;i<num;i++){print_score(&a[i]);}cin.get();}voidprint_score(test*pn)的效率是要高過(guò)voidprint_score(testpn)的因?yàn)橹苯觾?nèi)存操作避免了??臻g開(kāi)辟結(jié)構(gòu)變量空間需求節(jié)省內(nèi)存?zhèn)鬟f結(jié)構(gòu)引用的例子利用引用傳遞的好處很多它的效率和指針相差無(wú)幾但引用的操作方式和值傳遞幾乎一樣種種優(yōu)勢(shì)都說(shuō)明善用引用可以做到程序的易讀和易操作它的優(yōu)勢(shì)尤其在結(jié)構(gòu)和大的時(shí)候避免傳遞結(jié)構(gòu)變量很大的值節(jié)省內(nèi)存提高效率#include<iostream>#include<string>usingnamespacestd;structtest{charname[10];floatsocre;};voidprint_score(test&pn)//以結(jié)構(gòu)變量進(jìn)行傳遞{cout<<<<”|"<<pn.socre<<endl;}voidmain(){testa[2]={{"marry”88.5}{"jarck"98.5}};intnum=sizeof(a)/sizeof(test);for(inti=0;i<num;i++){print_score(a[i]);}cin.get();}上面我們說(shuō)明了易用引用對(duì)結(jié)構(gòu)體進(jìn)行操作的優(yōu)勢(shì)下面我們重點(diǎn)對(duì)比兩個(gè)例程進(jìn)一部分析關(guān)于效率的問(wèn)題//―列程1//#include<iostream>#include<string>usingnamespacestd;structtest{charname[10];floatsocre;};voidprint_score(test&pn){cout<<<<”|"<<pn.socre<<endl;}testget_score(){testpn;cin>>>>pn.socre;returnpn;}voidmain(){testa[2];intnum=sizeof(a)/sizeof(test);for(inti=0;i<num;i++){a[i]=get_score();}cin.get();for(inti=0;i<num;i++){print_score(a[i]);}cin.get();}// 例程2 #include<iostream>#include<string>usingnamespacestd;structtest{charname[10];floatsocre;};voidprint_score(test&pn){cout<<<<”|"<<pn.socre<<endl;}voidget_score(test&pn){cin>>>>pn.socre;}voidmain(){testa[2];intnum=sizeof(a)/sizeof(test);for(inti=0;i<num;i++){get_score(a[i]);}cin.get();for(inti=0;i<num;i++){print_score(a[i]);}cin.get();}例程2的效率要遠(yuǎn)高過(guò)例程1的原因主要有以下兩處:第一:例程1中的testget_score(){testpn;cin>>>>pn.socre;returnpn;}調(diào)用的時(shí)候在內(nèi)部要在棧空間開(kāi)辟一個(gè)名為pn的結(jié)構(gòu)體變量程序pn的時(shí)候又再次在棧內(nèi)存空間內(nèi)自動(dòng)生成了一個(gè)臨時(shí)結(jié)構(gòu)體變量temp在前面的教程中我們已經(jīng)說(shuō)過(guò)它是一個(gè)copy而例程2中的:voidget_score(test&pn){cin>>>>pn.socre;}卻沒(méi)有這一過(guò)程不開(kāi)辟任何新的內(nèi)存空間也沒(méi)有任何臨時(shí)變量的生成AA" 第-二二:例程1在mian()中必須對(duì)返回的結(jié)構(gòu)體變量進(jìn)行一次結(jié)構(gòu)體變量與結(jié)構(gòu)體變量直接的相互賦值操作for(inti=0;i<num;i++){a[i]=get_score();}而例程2中由于是通過(guò)內(nèi)存地址直接操作所以完全沒(méi)有這一過(guò)程提高了效率for(inti=0;i<num;i++){get_score(a[i]);}函數(shù)也是可以返回結(jié)構(gòu)體應(yīng)用的例子如下:#include<iostream>#include<string>usingnamespacestd;structtest{charname[10];floatsocre;};testa;test&get_score(test&pn){cin>>>>pn.socre;returnpn;}voidprint_score(test&pn){cout<<<<”|"<<pn.socre<<endl;}voidmain(){test&sp=get_score(a);cin.get();cout<<<<”|"<<sp.socre;cin.get();}調(diào)用get_score(a);結(jié)束并返回的時(shí)候函數(shù)內(nèi)部沒(méi)有臨時(shí)變量的產(chǎn)生返回直接吧全局結(jié)構(gòu)變量a的內(nèi)存地址賦予結(jié)構(gòu)引用sp最后提一下指針的引用定義指針的引用方法如下:voidmain(){int

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論