C++ 傳引用調(diào)用

2023-03-20 15:57 更新

C++中另一種可選擇的參數(shù)傳遞機(jī)制被稱為"傳引用調(diào)用"。這種機(jī)制使得我們能傳遞一個(gè)結(jié)構(gòu)體給程序并修改它。

例如,你可以通過(guò)交換兩個(gè)坐標(biāo)來(lái)得到某個(gè)點(diǎn)關(guān)于45度線的對(duì)稱點(diǎn)。reflect函數(shù)最明顯(但不正確)的寫(xiě)法是:

void reflect (Point p)     //錯(cuò)誤!!
{
   double temp = p.x;
   p.x = p.y;
   p.y = temp;    
}

這么寫(xiě)并不奏效,因?yàn)槲覀冊(cè)趓eflect函數(shù)中所做的改變并不會(huì)影響調(diào)用者。

相反,我們必須指明要通過(guò)引用傳遞參數(shù)。為參數(shù)聲明加上一個(gè)符號(hào)(&)即可。

void reflect (Point& p)
{
  double temp = p.x;
  p.x = p.y;
  p.y = temp; 
}

現(xiàn)在我們以普通方式調(diào)用這個(gè)函數(shù):

printPoint(blank);
reflect(blank);
printPoint(blank);

程序輸出與預(yù)期相符:

(3,4)
(4,3)

下圖展示了我們?yōu)槌绦蚶L制的棧圖:

enter image description here

參數(shù)p是blank結(jié)構(gòu)的一個(gè)引用。引用通常用一個(gè)帶箭頭的點(diǎn)表示,箭頭指向引用所指。

圖中最重要的是要看到:引用對(duì)p做的任何改變同樣會(huì)影響blank。

通過(guò)引用傳遞結(jié)構(gòu)比按值傳遞更通用,這是因?yàn)楸徽{(diào)用者也能修改結(jié)構(gòu)。此外,由于系統(tǒng)不需要復(fù)制整個(gè)結(jié)構(gòu),這使得引用傳遞更快。另一方面,它的安全性下降了,因?yàn)楹茈y追蹤結(jié)構(gòu)是在哪被修改的。盡管如此,在C++程序中,幾乎所有的結(jié)構(gòu)都是按引用傳遞的。本書(shū)中我會(huì)遵循這一習(xí)慣。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)