C 引用作為函式引數

2021-06-29 13:10:30 字數 3939 閱讀 1491

/  c++

/  c++入門教程

/  c++指標

/  

《上一節

下一節》

分享到:

qq空間

豆瓣

人人網

width="728" height="90" frameborder="0" marginwidth="0" marginheight="0" vspace="0" hspace="0" allowtransparency="true" scrolling="no" allowfullscreen="true" id="aswift_1" name="aswift_1" style="left: 0px; position: absolute; top: 0px;">

北風網【程式設計輔導班】

規劃學習路線 + 推薦學習資料 + 自學 + 一對一答疑 + 就業指導

有了變數名,為什麼還需要乙個別名呢?c++之所以增加引用型別, 主要是把它作為函式引數,以擴充函式傳遞資料的功能。

到目前為止我們介紹過函式引數傳遞的兩種情況。

1) 將變數名作為實參和形參

這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回給實參。因為在呼叫函式時,形參和實參不是同乙個儲存單元。

【例6.18】要求將變數i和j的值互換。下面的程式無法實現此要求。

#include

using

namespace std;

intmain()

void

swap

(int a,

int b)

//企圖通過形參a和b的值互換,實現實參i和j的值互換

執行時輸出3 5i和j的值並未互換。見圖6.27示意。

為了解決這個問題,採用傳遞變數位址的方法。

圖6.27

2) 傳遞變數的指標

形參是指標變數,實參是乙個變數的位址,呼叫函式時,形參(指標變數)指向實參變數單元。程式見例6.19。

【例6.19】使用指標變數作形參,實現兩個變數的值互換。

#include

using

namespace std;

intmain()

void

swap

(int

*p1,

int*p2)

//形參是指標變數

形參與實參的結合見圖6.28示意。

圖6.28

這種虛實結合的方法仍然是「值傳遞」方式,只是實參的值是變數的位址而已。通過形參指標變數訪問主函式中的變數(i和j),並改變它們的值。這樣就能得到正確結果,但是在概念上卻是兜了乙個圈子,不那麼直截了當。

在pascal語言中有「值形參」和「變數形參」(即var形參),對應兩種不同的傳遞方式,前者採用值傳遞方式,後者採用位址傳遞方式。在c語言中,只有「值形參」而無「變數形參」,全部採用值傳遞方式。c++把引用型變數作為函式形參,就彌補了這個不足。

c++提供了向函式傳遞資料的第(3)種方法,即傳送變數的別名。

【例6.20】利用「引用形參」實現兩個變數的值互換。

#include

using

namespace std;

intmain()

void

swap

(int

&a,int

&b)//形參是引用型別

輸出結果為:

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的別名。

請思考:這種傳遞方式和使用指標變數作形參時有何不同?分析例6.20(對比例6.19),可以發現:

【例6.21】對3個變數按由小到大的順序排序。

複製

純文字新視窗

#include

using

namespace std;

intmain()

void

sort

(int

&i,int

&j,int

&k)//對i,j,k 3個數排序

void

change

(int

&x,int

&y)//使x和y互換

運**況如下:

please enter 3 integers:23 12 -345↙

sorted order is -345 12 23

可以看到:這個程式很容易理解,不易出錯。由於在呼叫sort函式時虛實結合使形參i,j,k成為實參a1,b1,c1的引用,因此通過呼叫函式sort(a1, b1, c1)既實現了對i,j,k排序,也就同時實現了對a1,b1,c1排序。同樣,執行change (i, j)函式,可以實現對實參i和j的互換。

引用不僅可以用於變數,也可以用於物件。例如實參可以是乙個物件名,在虛實結合時傳遞物件的起始位址。這會在以後介紹。

當看到&a這樣的形式時,怎樣區別是宣告引用變數還是取位址的操作呢?當&a的前面有型別符時(如int &a),它必然是對引用的宣告;如果前面無型別符(如cout<

《上一節

下一節》

分享到:

qq空間

豆瓣

人人網

社交帳號登入:

提交

最新最早最熱

c語言中文網正在使用多說

教程目錄

1c++初步

2資料型別與表示式

3程式設計初步

4函式與預處理

5c++陣列

6c++指標

6.1 

指標的概念

6.2 

變數與指標

6.3 

指標作為函式引數

6.4 

陣列與指標

6.5 

字串與指標

6.6 

函式與指標

6.7 

返回指標值的函式

6.8 

指標陣列和指向指標的指標

6.9 

指標資料型別和指標運算小結

6.10 

c++引用

6.11 

引用作為函式引數

7結構體|共用體|列舉

8c++類和物件

9類和物件[高階]

10運算子過載

11c++繼承與派生

12多型性與虛函式

13c++輸入輸出

|||

C 引用作為函式引數

有了變數名,為什麼還需要乙個別名呢?c 之所以增加引用型別,主要是把它作為函式引數,以擴充函式傳遞資料的功能。到目前為止我們介紹過函式引數傳遞的兩種情況。1 將變數名作為實參和形參 這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回給實參。因為在呼叫函式時,形參和實...

C 引用作為函式引數

有了變數名,為什麼還需要乙個別名呢?c 之所以增加引用型別,主要是把它作為函式引數,以擴充函式傳遞資料的功能。一下是三種函式傳遞情況 1 將變數名作為實參和形參 這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回給實參。因為在呼叫函式時,形參和實參不是同乙個儲存單元...

C 學習 引用作為函式引數

在我們的程式設計過程中,我們經常將引用用作函式引數,使得函式中的變數名成為呼叫程式中的變數的別名.這種傳遞引數的方法成為按引用傳遞.但是在函式中使用引用,往往會改變被引用物件的值.所以引入const.將引用引數宣告為常量資料的引用的理由有三個 1 使用const可以避免無意中修改資料的程式設計錯誤 ...