什麼是引用?函式傳遞引數的三種方式

2021-09-25 01:20:21 字數 3192 閱讀 1061

引用,顧名思義是某乙個變數或物件的別名,對引用的操作與對其所繫結的變數或物件的操作完全等價

語法:型別 &引用名=目標變數名;
特別注意:1.&不是求位址運算子,而是起標誌作用

2.引用的型別必須和其所繫結的變數的型別相同

1 #include2 using namespace std;

3 int main()

4.引用相當於變數或物件的別名,因此不能再將已有的引用名作為其他變數或物件的名字或別名5.引用不是定義乙個新的變數或物件,因此記憶體不會為引用開闢新的空間儲存這個引用

1 #include2 using namespace std;

3 int main()

6.對陣列的引用

語法:型別 (&引用名)[陣列中元素數量]=陣列名;

1 #include2 using namespace std;

3 int main();

5 int (&b)[3]=a;//對陣列的引用

7.對指標的引用

語法:型別 *&引用名=指標名;//可以理解為:(型別*) &引用名=指標名,即將指標的型別當成型別*

1 #include2 using namespace std;

3 int main()

8 int main()

6 int main();

8 func(number);

9 return 0;

10 }

語法:const 型別 &引用名=目標變數名;
常引用不允許通過該引用對其所繫結的變數或物件進行修改

1 #include2 using namespace std;

3 int main()

特別注意:先看下面的例子

1 #include2 #include3 using namespace std;

4 string func1()

8 void func2(string &str)

8 void func2(conststring &str)

特別注意:1.引用作為函式的返回值時,必須在定義函式時在函式名前將&2.用引用作函式的返回值的最大的好處是在記憶體中不產生返回值的副本2 #include3 using namespace std;

4 float temp;

5 float fn1(float r)

9 float &fn2(float r)

13 int main()

11 12 int main()//son是father的派生類son son;//son是類son的乙個例項father &ptr=son;//用派生類的物件初始化基類物件的使用

特別注意:ptr只能用來訪問派生類物件中從基類繼承下來的成員如果基類(類father)中定義的有虛函式,那麼就可以通過在派生類(類son)中重寫這個虛函式來實現類的多型。

1.在引用的使用中,單純給某個變數去別名是毫無意義的,引用的目的主要用於在函式引數的傳遞中,解決大塊資料或物件的傳遞效率和空間不如意的問題

2.用引用傳遞函式的引數,能保證引數在傳遞的過程中不產生副本,從而提高傳遞效率,同時通過const的使用,還可以保證引數在傳遞過程中的安全性

3.引用本身是目標變數或物件的別名,對引用的操作本質上就是對目標變數或物件的操作。因此能使用引用時盡量使用引用而非指標

對於自定義函式,我們需要建立實參與形參之間的關係,這種關係可以分為傳值呼叫和傳址呼叫,二者在結果上的區別就是傳值呼叫不能改變實參的值,而傳址呼叫可以改變原實參的值。

下面以自定義swap函式為例說明:

一、傳值呼叫:不能改變實參的值,較容易理解,略。

二、傳址呼叫:

1、引用傳遞:(常用)

注意事項:①、int &a=n;表示給n起了乙個別名a;

②、函式內對a的操作及對n進行操作。

示例**:

#include

using namespace std;

void swap(int &x,int &y)  //*

int main()

int main()

{int a,b;

cin>>a>>b;

swap(&a,&b);  //實參向形參傳遞的應為指標型變數;

cout最後關於陣列與指標問題的幾點注意事項:

①、a[1]表示的是乙個數值,*(a+1)表示的是數值;a+1表示的是a[1]的位址(同樣&a[1]表示的也是a[1]的地)。

如:

#include

using namespace std;

int a[101];

int main()

{a[1]=9;

cout

函式引數傳遞的三種方式

問題及 1 檔名稱 my first blog.cpp 作 者 林志文 完成日期 2016年9月5日 版 本 號 v1.0 問題描述 交換兩個整型變數的swap函式的三個版本 輸入描述 兩個整數 程式輸出 交換後的兩個整數 includevoid myswap int p1,int p2 void ...

C C 函式引數的三種傳遞方式

函式引數傳遞方式一 值傳遞 格式 void swap int a,int b void main 函式引數傳遞方式二 位址傳遞 格式 void swap int a,int b void main 函式引數傳遞方式三 引用傳遞 注意 引用傳遞在c中不可用,僅c 支援 格式 void swap int...

10 函式引數傳遞的三種方式

c 入門書籍中介紹的不多,但是實際應用中很關鍵 本文先構建概念框架,然後用詳盡的 解釋 void fun1 int a,int b 值傳遞 void fun2 int a,int b 引用傳遞 void fun3 int a,int b 指標傳遞 void fun4 int a,int b 指標的指...