C/C++函數(shù)參數(shù)傳遞機(jī)制詳解及實(shí)例
C/C++函數(shù)參數(shù)傳遞機(jī)制詳解及實(shí)例
概要:
C/C++的基本參數(shù)傳遞機(jī)制有兩種:值傳遞和引用傳遞,我們分別來(lái)看一下這兩種的區(qū)別。
(1)值傳遞過(guò)程中,需在堆棧中開(kāi)辟內(nèi)存空間以存放由主調(diào)函數(shù)放進(jìn)來(lái)的實(shí)參的值,從而成為了實(shí)參的一個(gè)副本。值傳遞的特點(diǎn)是被調(diào)函數(shù)對(duì)形參的任何操作都是作為局部變量進(jìn)行,不會(huì)影響主調(diào)函數(shù)的實(shí)參變量的值。
(2)引用傳遞過(guò)程中,被調(diào)函數(shù)的形參雖然也作為局部變量在堆棧中開(kāi)辟了內(nèi)存空間,但是這時(shí)存放的是由主調(diào)函數(shù)放進(jìn)來(lái)的實(shí)參變量的地址。被調(diào)函數(shù)對(duì)形參的任何操作都被處理成間接尋址,即通過(guò)堆棧中存放的地址訪問(wèn)主調(diào)函數(shù)中的實(shí)參變量。正因?yàn)槿绱?,被調(diào)函數(shù)對(duì)形參做的任何操作都影響了主調(diào)函數(shù)中的實(shí)參變量。
下面我們來(lái)看一個(gè)示例。
/* *測(cè)試函數(shù)參數(shù)傳遞機(jī)制 */ class CRect { public: int height; int widht; CRect() { height = 0; widht = 0; } CRect(int height, int widht) { this->height = height; this->widht = widht; } }; //(1)傳址調(diào)用(傳指針) int RectAreaPoint(CRect *rect) { int result = rect->height * rect->widht; rect->height = 20; return result; } //(2)引用傳遞 int RectAreaRefer(CRect &rect) { int result = rect.height * rect.widht; rect.height = 30; return result; } //(3)傳值調(diào)用 int RectArea(CRect rect) { int result = rect.height * rect.widht; rect.height = 40; return result; }
看一下我們的測(cè)試代碼和測(cè)試結(jié)果。
//測(cè)試代碼邏輯 void testPoint() { CRect rect(10, 10); cout << "面積:" << RectAreaPoint(&rect) << endl; cout << "面積:" << RectAreaRefer(rect) << endl; cout << "rect.height:" << rect.height << endl; cout << "面積:" << RectArea(rect) << endl; cout << "rect.height:" << rect.height << endl; } //測(cè)試結(jié)果 面積:100 面積:200 rect.height:30 面積:300 rect.height:30
可以發(fā)現(xiàn)傳址調(diào)用和引用傳遞兩種方式,當(dāng)改變形參的值時(shí),同時(shí)也會(huì)將實(shí)參的值改變,而傳值調(diào)用改變形參則對(duì)實(shí)參沒(méi)有任何影響。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
C++實(shí)現(xiàn)基于時(shí)序公平的讀寫鎖詳解
讀寫鎖與普通的互斥鎖的區(qū)別在于有兩種上鎖方式:讀鎖和寫鎖,不用的用戶對(duì)同一個(gè)讀寫鎖獲取讀鎖是非互斥的,其他情況則是互斥的,本文小編將給大家詳細(xì)介紹C++實(shí)現(xiàn)基于時(shí)序公平的讀寫鎖,需要的朋友可以參考下2023-10-10C語(yǔ)言自定義數(shù)據(jù)類型的結(jié)構(gòu)體、枚舉和聯(lián)合詳解
這篇文章主要給大家介紹了關(guān)于C語(yǔ)言自定義數(shù)據(jù)類型的結(jié)構(gòu)體、枚舉和聯(lián)合的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05怎么通過(guò)C語(yǔ)言自動(dòng)生成MAC地址
以下是對(duì)使用C語(yǔ)言自動(dòng)生成MAC地址的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下2013-09-09哈希表實(shí)驗(yàn)C語(yǔ)言版實(shí)現(xiàn)
以下是對(duì)哈希表實(shí)驗(yàn)用C語(yǔ)言實(shí)現(xiàn)的代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以參考下2013-07-07VScode上配置 c語(yǔ)言環(huán)境的圖文教程
這篇文章主要介紹了配置VScode c語(yǔ)言環(huán)境,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05