c++中的引用,就像是對這個記憶體位址上起了乙個別名。
例,如下**所示:
int a=10;
//實際上程式為此做出指標
//相當於 int * const b= &a;
//同樣說明它的指向不可以更改,但是值可以更改
int&b=a;
//正確
int& c=a;
//正確
//下面兩行是錯誤的引用,引用必須立即初始化
int&d;
d=a;
看如上的**:
a 相當於你的大名;b 和c 相當於你的小名。
這麼思考: 假設你叫張三,小名叫三兒和小三,首先確認乙個問題,叫張
三、三兒和小三都是在叫你對吧。即程式中大名(張三)和小名(三兒和小三)對應的都是同乙個資料。那麼厲害的結論來了:叫張三或者三兒或者小三去脫掉衣服或者穿上衣服,那麼三個對應同乙個人,是不是這三個名字對應的同乙個人都脫掉衣服或者穿上衣服,在程式中即修改了同一記憶體位址下的值。
1.基本型別的引用(看如下**)
#include
using
namespace std;
2.結構體型別的引用(看如下**)#include
using
namespace std;
//定義乙個名叫coor的結構體,這是乙個座標。
typedef
struct
coor;
intmain
(void
)
3.指標型別的引用(看如下**)
指標型別的引用是引用當中最為複雜,最難理解的一部分,同時在寫法形式上也有著與眾不同的地方。
定義 : 型別 *&指標引用名 = 指標;
#include
using
namespace std;
intmain
(void
)
4.引用作函式引數(看如下**)
沒有學習引用之前的程式
//將兩個值進行交換
void
fun(
int*a,
int*b)
//形參為兩個整型的指標變數
int x =
10,y =20;
fun(
&x,&y)
;//在主函式中呼叫時,傳過去的實參需要寫成 取位址a,取位址b,比較麻煩,也不易理解。
學習引用之後應該做成的程式void fun (
int&a,
int&b)
//形參為兩個整型的引用
int x =
10,y =20;
fun(x,y)
;//在主函式中呼叫時,實參傳過去後a是x的別名,b是y的別名。
引用 引用作引數
如果形參為引用型別,則形參是實參的別名,的使用說明此處只是原引數的另乙個名字而已 1.值傳遞 如果形參為非引用的傳值方式,則生成區域性臨時變數接收實參的值。void swap int left,int right 值傳遞的方式無法實現交換,因為傳參時對於引數left和right拷貝一臨時副本,交換的...
C 引用作為函式引數
有了變數名,為什麼還需要乙個別名呢?c 之所以增加引用型別,主要是把它作為函式引數,以擴充函式傳遞資料的功能。到目前為止我們介紹過函式引數傳遞的兩種情況。1 將變數名作為實參和形參 這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回給實參。因為在呼叫函式時,形參和實...
C 引用作為函式引數
有了變數名,為什麼還需要乙個別名呢?c 之所以增加引用型別,主要是把它作為函式引數,以擴充函式傳遞資料的功能。一下是三種函式傳遞情況 1 將變數名作為實參和形參 這時傳給形參的是變數的值,傳遞是單向的。如果在執行函式期間形參的值發生變化,並不傳回給實參。因為在呼叫函式時,形參和實參不是同乙個儲存單元...