新聞中心
本文小編為大家詳細(xì)介紹“C++中函數(shù)傳遞的方式是什么”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“C++中函數(shù)傳遞的方式是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。
值傳遞:
void fun(int x)
{
x += 5; //修改的只是y在棧中copy x,x只是y的一個(gè)副本,在內(nèi)存中重新開(kāi)辟的
一塊臨時(shí)空間把y的值送給了x;這樣也增加了程序運(yùn)行的時(shí)間,降低了程序的效率。}
void main(void)
{
int y = 0;
fun(y);
cout<<\"y = \"<
}
指針傳遞:
void fun(int *x) { *x += 5; //修改的是指針x指向的內(nèi)存單元值 } void main(void) { int y = 0; fun(&y); cout<<<<\"y = \"<引用傳遞:
void fun(int &x) { x += 5; //修改的是x引用的對(duì)象值 &x = y; } void main(void) { int y = 0; fun(y); cout<<<<\"y = \"<看了C++函數(shù)傳遞后我們繼續(xù)來(lái)談“const只能用于修飾輸入?yún)?shù)”的情況。
C++可變參數(shù)表基本內(nèi)容探討
各個(gè)C++內(nèi)存區(qū)域功能對(duì)比
C++ static不同的應(yīng)用方式
C++輸入輸出漢字具體應(yīng)用技巧分享
C++地址運(yùn)算符相關(guān)內(nèi)容詳解
當(dāng)輸入?yún)?shù)用“值傳遞”方式時(shí),我們不需要加const修飾,因?yàn)橛弥祩鬟f時(shí),函數(shù)將自動(dòng)用實(shí)際參數(shù)的拷貝初始化形式參數(shù),當(dāng)在函數(shù)體內(nèi)改變形式參數(shù)時(shí),改變的也只是棧上的拷貝而不是實(shí)際參數(shù)。
但要注意的是,當(dāng)輸入?yún)?shù)為ADT/UDT(用戶自定義類型和抽象數(shù)據(jù)類型)時(shí),應(yīng)該將“值傳遞”改為“const &傳遞”,目的可以提高效率。
例如:
void fun(A a); //效率底。函數(shù)體內(nèi)產(chǎn)生A類型的臨時(shí)對(duì)象用于復(fù)制參數(shù) a,但是臨時(shí)對(duì)象的構(gòu)造、復(fù)制、析構(gòu)過(guò)程都將消耗時(shí)間。
void fun(A const &a); //提高效率。用“引用傳遞”不需要產(chǎn)生臨時(shí)對(duì)象,省了臨時(shí)對(duì)象的構(gòu)造、復(fù)制、析構(gòu)過(guò)程消耗的時(shí)間。但光用引用有可能改變a,所以加const
當(dāng)輸入?yún)?shù)用C++函數(shù)傳遞中的“指針傳遞”方式時(shí),加const修飾可防止意外修改指針指向的內(nèi)存單元,起到保護(hù)作用。
例如:
void funstrcopy(char *strdest,const char *strsrc) //任何改變strsrc指向的內(nèi)存單元,編譯器都將報(bào)錯(cuò)
些時(shí)保護(hù)了指針的內(nèi)存單元,也可以保護(hù)指針本身,防止其地址改變。
例如:
void funstrcopy(char *strdest,const char *const strsrc)讀到這里,這篇“C++中函數(shù)傳遞的方式是什么”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
本文標(biāo)題:C++中函數(shù)傳遞的方式是什么-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://fisionsoft.com.cn/article/cdepjh.html