說下傳值,傳址以及引用吧。
成都創(chuàng)新互聯(lián)-云計算及IDC服務(wù)提供商,涵蓋公有云、IDC機房租用、成都服務(wù)器托管、等保安全、私有云建設(shè)等企業(yè)級互聯(lián)網(wǎng)基礎(chǔ)服務(wù),服務(wù)電話:18980820575
傳值,就是把你的變量的值傳遞給函數(shù)的形式參數(shù),實際就是用變量的值來新生成一個形式參數(shù),因而在函數(shù)里對形參的改變不會影響到函數(shù)外的變量的值。
傳址,就是傳變量的地址賦給函數(shù)里形式參數(shù)的指針,使指針指向真實的變量的地址,因為對指針?biāo)傅刂返膬?nèi)容的改變能反映到函數(shù)外,也就是能改變函數(shù)外的變量的值。
傳引用,實際是通過指針來實現(xiàn)的,能達到使用的效果如傳址,可是使用方式如傳值。
說幾點建議:
如果傳值的話,會生成新的對象,花費時間和空間,而在退出函數(shù)的時候,又會銷毀該對象,花費時間和空間。
因而如果int,char等固有類型,而是你自己定義的類或結(jié)構(gòu)等,都建議傳指針或引用,因為他們不會創(chuàng)建新的對象。
值傳遞。
實參與形參數(shù)據(jù)傳遞有兩種方式:值傳遞與地址傳遞。
地址傳遞的形式為
int
a=b;
也就是我們所說的引用,但引用只有C++中有,所以C語言都是值傳遞的。
有些人有誤解:認為C語言的int
*p=a;不也是按地址傳遞嗎?其實不是這樣的。
深入理解值傳遞與地址傳遞就會發(fā)現(xiàn):
值傳遞是:把實參的值傳給一個變量(形參)。所以int
*p=a也是把a的地址值傳給了指針變量p
地址傳遞是:直接把地址傳進來,沒有賦給任何變量,這樣在函數(shù)體內(nèi)對形參的操作也就是對實參地操作。有這種功能的也就是引用()了。
函數(shù)只有兩種傳遞方式:
1、值傳遞,又稱單向傳遞,只能把實參數(shù)值傳給形參 ,形參最后的結(jié)果不影響實參(形參改變大小 ,實參大小不變)。
2、址傳遞,通過指針,把實參的地址給形參,形參的大小可以影響實參。
擴展資料:
實參變量和形參變量之間的調(diào)用過程
1、函數(shù)的形參列于函數(shù)聲明中,在函數(shù)定義的函數(shù)體內(nèi)使用,在未出現(xiàn)函數(shù)調(diào)用時,形參不占內(nèi)存中的存儲單元。
2、將實參的值傳遞給形參,當(dāng)函數(shù)被調(diào)用時,實參列在函數(shù)名后面的括號里,執(zhí)行函數(shù)調(diào)用時,實參被傳遞給形參。
3、在執(zhí)行函數(shù)期間,由于形參已經(jīng)有值,可以利用其進行相關(guān)運算。
4、通過return語句將函數(shù)值帶回到主調(diào)函數(shù)。
5、調(diào)用結(jié)束,形參單元被釋放。實參單元仍保留并維持原值(值傳遞)。
參考資料來源:百度百科-實際參數(shù)