參考是可變的別名。例如
int m;int &n=m;
引用作為一個別名。它在邏輯上不是獨立的。它的存在具有依附性。所以引用必須在一開始就被初始化。並且其引用的物件在其整個生命週期中是不能被改變的(自始至終僅僅能依附於同一個變數)。
則不論什麼對引用的操作即對變數的操作。
引用通常是用於處理函式的引數與返回值。
使用規則:
a:引用在建立的時候必須被初始化(指標能夠在不論什麼時候賦值)
b:引用必須與一個確定的合法記憶體單元相關聯。
不存在NULL引用。
c:一旦引用初始化後,就不能改變引用所指向的變數。
#include <iostream>
#include<cstdio>
using namespace std;
int main()
{
int a=1;
int b=2;
int &k=b;
printf("%d %d %d %p %p %p\n",a,b,k,&a,&b,&k);
k=a;
printf("%d %d %d %p %p %p\n",a,b,k,&a,&b,&k);
return 0;
}
非常明顯。引用別名k和b有著同樣的地址,會間接性改變b變數。
(符合a,b,c規則)
指標是一個變數。其存放的是另外一個是變數的地址。
int m;
int *n=&m;
所以通過指標能夠對變數的地址進行直接操作,這樣程式猿有著更加靈活的選擇,可是,指標會帶來很多其它的不安全因素。
因此作為一個變數的指標。其在邏輯上是獨立的,它能夠被改變。包含其所指向的地址的改變和其指向的地址中所存放的資料的改變。
3:引用於指標在函式傳參時的差別:
在C++中。指標和引用經經常使用於函式的引數傳遞。然而,指標傳遞引數和引用傳遞引數是有本質上的不同的:
(這裡是在說實參指標本身的地址值不會變)
而在引用傳遞過程中,被調函式的形式引數儘管 也作為區域性變數在棧中開闢了記憶體空間,可是這時存放的是由主調函式放進來的實參變數的地址。被調函式對形參的不論什麼操作都被處理成間接定址,即通過棧中存放 的地址訪問主調函式中的實參變數。正由於如此,被調函式對形參做的不論什麼操作都影響了主調函式中的實參變數。
二者更加細微的差別有:
●相對於前面介紹的const的使用方法,沒有int& const a這樣的形式,而const int& a是有的, 前者指引用本身即別名不能夠改變。這是當然的。所以不須要這樣的形式。後者指引用所指的值不能夠改變。
●“sizeof 引用”得到的是所指向的變數(物件)的大小,而“sizeof 指標”得到的是指標本身的大小;
●指標和引用的自增(++)運算意義不一樣;
●引用是型別安全的,而指標不是 (引用比指標多了型別檢查
引用在函式引數傳遞中的運用。(類似於固定了的static型別。但又能夠自由改變)
#include <iostream>
using namespace std;
void Func(int &n)
{
n++;
cout<<"now the value is "<<n<<endl;
}
int main()
{
int a=10;
Func(a);
Func(a);
}
部分內容來自:http://www.cnblogs.com/lintong/archive/2012/07/28/2613222.html
版權宣告:本文部落格原創文章,部落格,未經同意,不得轉載。