說到引用,先來講一個(gè)故事:我們生活的院子里有這樣一個(gè)小盆友,他的名字叫羅XX,我們喜歡給他起一個(gè)外號(hào),看著他營(yíng)養(yǎng)不太好,腦袋比較大、身子比較小,于是我們就給他起了一個(gè)叫”蘿卜頭”的外號(hào)。那么羅XX就是他的真實(shí)姓名,蘿卜頭就是他的一個(gè)別名,那么什么是引用呢??
定義:引用:就是變量的一個(gè)別名。
注:作為別名來說,一個(gè)變量不能只有別名,而沒有自己的真實(shí)姓名。
基本數(shù)據(jù)類型的引用
如下面的一段代碼:
實(shí)例
#include <iostream> using namespace std; { int a = 3; int &b = a; //b就是a的引用,即b是a的一個(gè)別別名。 //引用必須初始化,否則編譯會(huì)報(bào)錯(cuò) b = 10; cout<< a << endl; //此時(shí)a 的值,已由原來的3變成了10.因?yàn)槲覀儫o論對(duì)別名做什么操作,其實(shí)都是對(duì)變量的本身做操作。就像我們?nèi)ソ惶}卜頭去干什么,羅XX本身就去干什么。 return 0; }
結(jié)構(gòu)體類型的引用
如下面的一段代碼:
實(shí)例
#include <iostream> using namespace std; //定義一個(gè)名叫Coor的結(jié)構(gòu)體,這是一個(gè)坐標(biāo)。 typedef struct { int x; int y; }Coor; int main(void) { Coor c1; //定義一個(gè)結(jié)構(gòu)體變量,叫c1. Coor &c = c1; //給c1起了一個(gè)別名叫c. c.x = 10; //通過引用給結(jié)構(gòu)體變量的數(shù)據(jù)成員賦值 c.y = 20; cout<< c1.x << c2.y; //輸出的結(jié)果:10 20 return 0; }
指針類型的引用
指針類型的引用是引用當(dāng)中最為復(fù)雜,最難理解的一部分,同時(shí)在寫法形式上也有著與眾不同的地方。
定義:
類型 *&指針引用名 = 指針;
看個(gè)例子:
實(shí)例
#include <iostream> using namespace std; int main(void) { int a = 10; //定義一個(gè)整型的a變量,a的值為10。 int *p = &a; //定義一個(gè)指向a變量的指針 int *&q = p; //定義一個(gè)指針的引用,即q為p的別名。 定義方法:類型 *&指針引用名 = 指針; *q = 20; //把20賦給*q,相當(dāng)于是把20賦值給*p,也就相當(dāng)于把20賦值給a. cout<< a << endl; //輸出a 的值為20. return 0; }
引用作函數(shù)參數(shù)
在沒有學(xué)習(xí)引用之前我們學(xué)習(xí) C 語言時(shí),學(xué)過這樣的經(jīng)典程序:
//將兩個(gè)值進(jìn)行交換 void fun( int *a,int *b) //形參為兩個(gè)整型的指針變量 { int temp = 0; //定義一個(gè)臨時(shí)變量。良好的習(xí)慣是定義一個(gè)變量并初始化它; c = *a; //將*a賦值給c; *a = *b; //將*b賦值給*a; *b = c; //再將c賦值給*b;這樣就完成了a、b數(shù)值的交換 } int x = 10,y = 20; fun(&x,&y); //在主函數(shù)中調(diào)用時(shí),傳過去的實(shí)參需要寫成 取地址a,取地址b,比較麻煩,也不易理解。
現(xiàn)在我們學(xué)習(xí)了引用,在完成同等功能時(shí)需要寫成什么樣子?
實(shí)例
void fun (int &a, int &b) //形參為兩個(gè)整型的引用 { int temp = 0; c = a; a = b; b = c; } int x = 10,y = 20; fun(x,y); //在主函數(shù)中調(diào)用時(shí),實(shí)參傳過去后a是x的別名,b是y的別名。
原文地址:https://blog.csdn.net/stop_and_go/article/details/51334137