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

2023-03-20 15:57 更新

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

例如,你可以通過交換兩個坐標來得到某個點關(guān)于45度線的對稱點。reflect函數(shù)最明顯(但不正確)的寫法是:

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

這么寫并不奏效,因為我們在reflect函數(shù)中所做的改變并不會影響調(diào)用者。

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

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

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

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

程序輸出與預期相符:

(3,4)
(4,3)

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

enter image description here

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

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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號