程序設(shè)計(jì)基礎(chǔ)函數(shù)參數(shù)傳遞_第1頁(yè)
程序設(shè)計(jì)基礎(chǔ)函數(shù)參數(shù)傳遞_第2頁(yè)
程序設(shè)計(jì)基礎(chǔ)函數(shù)參數(shù)傳遞_第3頁(yè)
程序設(shè)計(jì)基礎(chǔ)函數(shù)參數(shù)傳遞_第4頁(yè)
程序設(shè)計(jì)基礎(chǔ)函數(shù)參數(shù)傳遞_第5頁(yè)
已閱讀5頁(yè),還剩21頁(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)介

第四講:程序設(shè)計(jì)基礎(chǔ)結(jié)構(gòu)體、函數(shù)的參數(shù)傳遞結(jié)構(gòu)體由不同類(lèi)型的小盒子構(gòu)成的大盒子結(jié)構(gòu)緊湊,容易管理局部的數(shù)據(jù)相關(guān)性強(qiáng),查找方便迅速通過(guò)定義學(xué)生結(jié)構(gòu)體可將學(xué)生的學(xué)號(hào)、姓名、入學(xué)時(shí)間等與學(xué)生相關(guān)的各種不同類(lèi)型的數(shù)據(jù)集中存放在內(nèi)存的一段空間內(nèi)結(jié)構(gòu)體定義思考:這兩個(gè)結(jié)構(gòu)體有什么不同??

sizeof(struct

student)=?

sizeof(struct

student2)=?struct

student{char

name[20];int

age;};struct

student2{char

*name;int

age;};用

typedef

給結(jié)構(gòu)體起“別名”訪問(wèn)結(jié)構(gòu)體變量的成員對(duì)于定義為結(jié)構(gòu)體類(lèi)型的變量,使用圓點(diǎn)運(yùn)算符對(duì)于定義為指向結(jié)構(gòu)體的指針變量,用箭頭運(yùn)算符×指針必須先有所指!結(jié)構(gòu)體數(shù)組動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)學(xué)生成績(jī)管理系統(tǒng),學(xué)生總數(shù)隨時(shí)間而變化,不確定靜態(tài)數(shù)組,假設(shè)固定為30000:

s_STUDENT

arrStu[30000];數(shù)組屬于靜態(tài)內(nèi)存分配,一旦運(yùn)行,數(shù)組大小不能改變。學(xué)生數(shù)超過(guò)數(shù)組元素最大數(shù)的限制時(shí),程序?qū)⑹W(xué)生數(shù)遠(yuǎn)低于所設(shè)定的元素最大數(shù),將造成系統(tǒng)資源的浪費(fèi)動(dòng)態(tài)數(shù)組,根據(jù)用戶(hù)輸入的人數(shù),動(dòng)態(tài)確定數(shù)組的大小。通過(guò)指針實(shí)現(xiàn):s_STUDENT*

ptrStud=new

s_STUDENT[n];可以象使用數(shù)組那樣,通過(guò)指針存取n個(gè)學(xué)生記錄所占數(shù)據(jù)區(qū)。cin

>>

n;s_STUDENT*

ptrStud

=

new

s_STUDENT[n];cout

<<

ptrStud[0].name;ptrStud[i]等價(jià)于*(ptrStud+i)參數(shù)傳遞方式按值傳遞(pass-by-value)調(diào)用函數(shù)時(shí),根據(jù)形參類(lèi)型獲得一塊內(nèi)存,存放實(shí)參值的副本傳遞大的數(shù)據(jù)項(xiàng)時(shí),如結(jié)構(gòu)體,生成副本需要花費(fèi)大量的時(shí)間和內(nèi)存空間。按引用傳遞(pass-by-reference)將形參定義為指針類(lèi)型本質(zhì)上還是一種按值傳遞調(diào)用函數(shù)時(shí),生成一個(gè)指針類(lèi)型的盒子,并將實(shí)參的值(一個(gè)地址)放入該盒子。這個(gè)地址(實(shí)參值)么通過(guò)&運(yùn)算符獲得實(shí)參變量的地址。

printStd(

&secondStd

);要么從指針類(lèi)型的實(shí)參變量中取出,是實(shí)參變量所指向的變量地址;

printStd(

ptrSecondStd);指針作為函數(shù)的參數(shù)向函數(shù)傳遞結(jié)構(gòu)體的方法按值傳遞結(jié)構(gòu)體整體作為函數(shù)參數(shù),不提倡void

printStud(s_STUDENT

stud);按引用傳遞指針類(lèi)型的形參void

printStud(s_STUDENT

*stud);Student結(jié)構(gòu)體的例子變量的引用(C++增添)變量的引用:在函數(shù)中用做其他變量的別名xy引用參數(shù)將形參定義為對(duì)某個(gè)類(lèi)型的變量的引用,稱(chēng)為引用參數(shù)void

printStudent(struct

Student

&oneStudent);源代碼引用和引用參數(shù)按值傳遞(pass-by-value)調(diào)用函數(shù)時(shí),根據(jù)形參類(lèi)型獲得一塊內(nèi)存,存放實(shí)參值的副本傳遞大的數(shù)據(jù)項(xiàng)時(shí),如結(jié)構(gòu)體,生成副本需要花費(fèi)大量的時(shí)間和內(nèi)存空間。按引用傳遞(pass-by-reference)將形參定義為指針類(lèi)型。本質(zhì)上還是一種按值傳遞。調(diào)用函數(shù)時(shí),將一個(gè)地址(實(shí)參的值)放入指針類(lèi)型的盒子(形參)這個(gè)地址(實(shí)參值)(1)要么從指針類(lèi)型的實(shí)參變量中取出,(2)要么通過(guò)&運(yùn)算符從實(shí)參變量獲得。將形參定義為對(duì)某個(gè)類(lèi)型的變量的引用,稱(chēng)為引用參數(shù)在調(diào)用函數(shù)傳遞實(shí)參時(shí),為實(shí)參變量在被調(diào)函數(shù)中起了一個(gè)別名,即為該引用參數(shù)名返回值為指針的函數(shù)s_STUDENT

*initStdArray(int

size)帶默認(rèn)形參值的函數(shù)(C++)int

add(int

x

=

5,

int

y

=

6){return

x

+

y;}int

main(){add(10,

20);10+20add(10);10+6add();5+6}帶默認(rèn)形參值的函數(shù)有默認(rèn)值的形參必須在形參列表的最后,也即在有默認(rèn)值的形參右面,不能出現(xiàn)無(wú)默認(rèn)值的形參int

add(int

x,

int

y

=

5,int

z

=

6);

√intadd(int

x

=

1,int

y

=

5,int

z);

×intadd(int

x

=

1,

int

y,

int

z

=

6);

×不允許在同一個(gè)函數(shù)的多個(gè)聲明中對(duì)同一個(gè)參數(shù)的默認(rèn)值重復(fù)定義,即使前后定義的值相同也不行。int

add(int

x

=

5,

int

y=6);int

add(int

x/*

=

5

*/,

int

y/*

=

6

*/){//這里不能再出現(xiàn)默認(rèn)形參,但為了清晰,可通過(guò)注釋說(shuō)明默認(rèn)形參

return

x+y;}內(nèi)聯(lián)函數(shù)(C++)函數(shù)調(diào)用會(huì)降低程序的執(zhí)行效率,增加時(shí)間和空間方面的開(kāi)銷(xiāo)。對(duì)于一些功能簡(jiǎn)單、規(guī)模較小又使用頻繁的函數(shù),可以設(shè)計(jì)為內(nèi)聯(lián)函數(shù)。內(nèi)聯(lián)函數(shù)不是在程序執(zhí)行時(shí)發(fā)生控制轉(zhuǎn)移,而是在編譯時(shí)將函數(shù)體嵌入在每一個(gè)調(diào)用處。節(jié)省了參數(shù)傳遞、控制轉(zhuǎn)移等開(kāi)銷(xiāo)與C中的宏定義功能相同,但更簡(jiǎn)單易用函數(shù)的重載(C++)函數(shù)的簽名(Function

Signature)函數(shù)原型中的函數(shù)名和參數(shù)類(lèi)型部分,稱(chēng)為函數(shù)的簽名。函數(shù)的返回值類(lèi)型不屬于函數(shù)簽名函數(shù)的重載函數(shù)對(duì)應(yīng)某種功能。為了實(shí)現(xiàn)細(xì)節(jié)不同的同一類(lèi)功能,C語(yǔ)言中int

square1(

int

x

);

double

square2(

double

x

);C++允許函數(shù)同名,稱(chēng)為函數(shù)的重載(Overloading)。但是要求:要么參數(shù)個(gè)數(shù)不一樣,要么至少有一個(gè)位置的參數(shù)類(lèi)型不同。int

square(

int

x

);

double

square(

double

x

);函數(shù)的重載下面那些函數(shù)定義是可以添加的?函數(shù)的重載下面那些函數(shù)定義是可以添加的???課本中位置引用、內(nèi)聯(lián)函數(shù)、默認(rèn)形參值、函數(shù)重載等鄭版

P78—P86,譚版

P12—P25,數(shù)據(jù)的保護(hù)—const

修飾符(C++)按引用傳遞參數(shù)時(shí),在被調(diào)函數(shù)中可以對(duì)主調(diào)函數(shù)中的數(shù)據(jù)進(jìn)行修改。這種修改不會(huì)因被調(diào)函數(shù)的結(jié)束而消失。如果在被調(diào)函數(shù)中僅僅是讀取主調(diào)函數(shù)中的數(shù)據(jù),而不修改,傳地址僅僅是為了提高效率。為了防止程序員因?yàn)槭д`而寫(xiě)了修改主調(diào)函數(shù)中的數(shù)據(jù)的代碼,C++提供了一種機(jī)制,可以聲明主調(diào)函數(shù)中的數(shù)據(jù)在被調(diào)函數(shù)中是只讀的。void

printStd(const

s_STUDENT

&ptrStd);譚版:P23;鄭版:P163,

5.5.1

常對(duì)象P166,5.5.3

常引用模擬洗牌和發(fā)牌過(guò)程一副撲克有52張牌,分為4種花色(suit):黑桃(Spades),紅桃(Hearts),方塊(Diamonds),草花(Clubs)每種花色又有13張牌面(Face):A,

2,

3,

,

10,

Jack,

Queen,

King今后的安排第四周3月21日:面向?qū)ο蟪醪剑?月20日、3月23日--實(shí)驗(yàn)2)第五周3月26日:實(shí)驗(yàn)2習(xí)題課(3月27日、3月30日--實(shí)驗(yàn)3)第六周3月31日:類(lèi)的深入剖析-1(4月1日、4月6日–實(shí)驗(yàn)3) 布置作業(yè)4:收音機(jī)類(lèi)4月4日:清明節(jié)休息第七周4月9日:實(shí)驗(yàn)3習(xí)題課、作業(yè)4講解4月10日、4月13日–實(shí)驗(yàn)4今后的安排第八周4月16日、4月18日:類(lèi)的深入剖析-2+實(shí)驗(yàn)4習(xí)題課4月17日、4月20日:實(shí)驗(yàn)4(Date)+實(shí)驗(yàn)5第九周4月23日:期中測(cè)驗(yàn)(隨堂,開(kāi)卷)4月24日、4月27

溫馨提示

  • 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)論