有了變數名,為什麼還需要乙個別名呢?c++之所以增加引用型別, 主要是把它作為函式引數,以擴充函式傳遞資料的功能。
到目前為止我們介紹過函式引數傳遞的兩種情況。
1) 將變數名作為實參和形參
這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回給實參。因為在呼叫函式時,形參和實參不是同乙個儲存單元。
例6.18】要求將變數i和j的值互換。下面的程式無法實現此要求。
#include using namespace std;
int main( )
{ void swap(int,int); //函式宣告
int i=3,j=5;
swap(i,j); //呼叫函式swap
cout執行時輸出3 5i和j的值並未互換。見圖6.27示意。
為了解決這個問題,採用傳遞變數位址的方法。
圖6.27
2) 傳遞變數的指標
形參是指標變數,實參是乙個變數的位址,呼叫函式時,形參(指標變數)指向實參變數單元。程式見例6.19。
【例6.19】使用指標變數作形參,實現兩個變數的值互換。
#include using namespace std;
int main( )
{ void swap(int *,int *);
int i=3,j=5;
swap(&i,&j); //實參是變數的位址
cout形參與實參的結合見圖6.28示意。
圖6.28
這種虛實結合的方法仍然是「值傳遞」方式,只是實參的值是變數的位址而已。通過形參指標變數訪問主函式中的變數(i和j),並改變它們的值。這樣就能得到正確結果,但是在概念上卻是兜了乙個圈子,不那麼直截了當。
在pascal語言中有「值形參」和「變數形參」(即var形參),對應兩種不同的傳遞方式,前者採用值傳遞方式,後者採用位址傳遞方式。在c語言中,只有「值形參」而無「變數形參」,全部採用值傳遞方式。c++把引用型變數作為函式形參,就彌補了這個不足。
c++提供了向函式傳遞資料的第(3)種方法,即傳送變數的別名。
【例6.20】利用「引用形參」實現兩個變數的值互換。
#include using namespace std;
int main( )
{ void swap(int &,int &);
int i=3,j=5;
swap(i,j);
cout<
i=5 j=3
在swap函式的形參表列中宣告a和b 是整型變數的引用。
圖6.29
實際上,在虛實結合時是把實參i的位址傳到形參a,使形參a的位址取實參i的位址,從而使a和i共享同一單元。同樣,將實參j的位址傳到形參b,使形參b的位址取實參j的位址,從而使b和j共享同一單元。這就是位址傳遞方式。
為便於理解,可以通俗地說:把變數i的名字傳給引用變數a,使a成為i的別名。
C 引用作為函式引數
有了變數名,為什麼還需要乙個別名呢?c 之所以增加引用型別,主要是把它作為函式引數,以擴充函式傳遞資料的功能。一下是三種函式傳遞情況 1 將變數名作為實參和形參 這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回給實參。因為在呼叫函式時,形參和實參不是同乙個儲存單元...
C 引用作為函式引數
c c 入門教程 c 指標 上一節 下一節 分享到 qq空間 豆瓣 人人網 width 728 height 90 frameborder 0 marginwidth 0 marginheight 0 vspace 0 hspace 0 allowtransparency true scrollin...
C 學習 引用作為函式引數
在我們的程式設計過程中,我們經常將引用用作函式引數,使得函式中的變數名成為呼叫程式中的變數的別名.這種傳遞引數的方法成為按引用傳遞.但是在函式中使用引用,往往會改變被引用物件的值.所以引入const.將引用引數宣告為常量資料的引用的理由有三個 1 使用const可以避免無意中修改資料的程式設計錯誤 ...