[C++]指標和引用(三)
引用
對變數起另外一個名字 (外號),這個名字稱為該變數的引用。
<型別> &<引用變數名> = <原變數名>;
其中原變數名必須是一個已定義過的變數。如:
int max ;
int &refmax=max;
refmax並沒有重新在記憶體中開闢單元,只是引用max的單元。max與refmax在記憶體中佔用同一地址,即同一地址兩個名字。
對引用型別的變數,說明以下幾點:
1、引用在定義的時候要初始化。
int &refmax; 錯誤,沒有具體的引用物件
int &refmax=max; max是已定義過的變數
2、對引用的操作就是對被引用的變數的操作。
3、 引用型別變數的初始化值不能是一個常數。
如:int &ref1 = 5; // 是錯誤的。
int &ref=i;
4、引用同變數一樣有地址,可以對其地址進行操作,即將其地址賦給一指標。
5、可以用動態分配的記憶體空間來初始化一個引用變數。
float &reff = * new float ; //用new開闢一個空間,取一個別名reff
reff= 200;//給空間賦值
cout << reff ;//輸出200
delete &reff;//收回這個空間
這個空間只有別名,但程式可以引用到。
float *p, a;
p=new float;
float a=* new float;
指標與引用的區別:
1、指標是通過地址間接訪問某個變數,而引用是通過別名直接訪問某個變數。
2、引用必須初始化,而一旦被初始化後不得再作為其它變數的別名。
當&a的前面有型別符時(如int &a),它必然是對引用的宣告;如果前面無型別符(如cout<<&a),則是取變數的地址。
以下的宣告是非法的
1、企圖建立陣列的引用 int & a[9];
2、企圖建立指向引用的指標 int & *p;
3、企圖建立引用的引用 int & &px;
對常量(用const宣告)的引用
void main(void)
{
const int &r=8; //說明r為常量,不可賦值
cout<<"r="<<r<<endl;
//r+=15;//r為常量,不可作賦值運算
cout<<"r="<<r<<endl;
}
引用與函式
引用的用途主要是用來作函式的引數或函式的返回值。
引用作函式的形參,實際上是在被調函式中對實參變數進行操作。
void change(int &x, int &y)//x,y是實參a,b的別名
{ int t;
t=x; x=y; y=z;
}
void main(void)
{ int a=3,b=5;
change(a,b); //實參為變數
cout<<a<<‘\t’<<b<<endl;
}
引用作為形參,實參是變數而不是地址,這與指標變數作形參不一樣。
函式的返回值為引用型別
可以把函式定義為引用型別,這時函式的返回值即為某一變數的引用(別名),因此,它相當於返回了一個變數,所以可對其返回值進行賦值操作。這一點類同於函式的返回值為指標型別 。
一個函式返回引用型別,必須返回某個型別的變數。
語句:getdata()=8;
就相當於 int &temp=8;
temp=8 ;
注意:由於函式呼叫返回的引用型別是在函式執行結束後產生的,所以函式不能返回自動變數和形參。
返回的變數的引用,這個變數必須是全域性變數或靜態區域性變數,即儲存在靜態區中的變數。
我們都知道,函式作為一種程式實體,它有名字、型別、地址和儲存空間,一般說來函式不能作為左值(即函式不能放在賦值號左邊)。但如果將函式定義為返回引用型別,因為返回的是一個變數的別名,就可以將函式放在左邊,即給這個變數賦值。
const型別變數
當用const限制說明識別符號時,表示所說明的資料型別為常量型別。可分為const型常量和const型指標。
可用const限制定義識別符號量,如:
const int MaxLine =1000;
const float Pi=3.1415926
用const定義的識別符號常量時,一定要對其初始化。在說明時進行初始化是對這種常量置值的唯一方法 ,不能用賦值運算子對這種常量進行賦值。如:
MaxLine =35;
const 型指標
1)禁寫指標
宣告語句格式為: 資料型別 * const 指標變數名
如:int r=6;
int * const pr=&r;
則指標pr被禁寫,即pr將始終指向一個地址,成為一個指標常量。它將不能再作為左值而放在賦值號的左邊。(舉例說明)
雖然指標被禁寫,但其間接引用並沒有被禁寫。即可以通過pr對r賦值。*pr=8;
2)禁寫間接引用
宣告語句格式如下:
const 資料型別 *指標變數名;
所宣告的指標指向一禁寫的實體,即間接引用不能被改寫。如: const int *p;
所以程式中不能出現諸如 *p= 的語句,但指標p並未被禁寫,因而可對指標p進行改寫。
3)禁寫指標又禁寫間接引用
將上面兩種情況結合起來,宣告語句為下面的格式
const 資料型別 *const 指標變數名
如:const int *const px=&x
說明:px是一個指標常量,它指向一禁寫的實體,並且指標本身也被禁寫,諸如:px= *px= 此類的語句都是非法的。
在定義時必須賦初值。
相關文章
- C++引用和指標C++指標
- [C++]指標和引用(一)C++指標
- [C++]指標和引用(二)C++指標
- [C++]指標和引用(四)C++指標
- 詳解c++指標的指標和指標的引用C++指標
- java的引用:用C++/C的引用和指標去理解JavaC++指標
- 1.0 - 指標和引用指標
- C++中的指標與引用C++指標
- nim的引用和指標指標
- 《指標和引用小結》指標
- 細說引用和指標指標
- C++指標與引用的區別C++指標
- c++ 類的函式引用 指標C++函式指標
- 07 引用 指標 和傳遞指標
- 指標和引用的區別指標
- C、C++用指標引用的差異C++指標
- c++指標傳遞與引用傳遞C++指標
- 指標與引用指標
- C++中const與指標、引用的總結C++指標
- C++中的指標與引用詳細解讀C++指標
- C++智慧指標學習——小談引用計數C++指標
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- C++ 引用和指標:記憶體地址、建立方法及應用解析C++指標記憶體
- C++弱引用智慧指標weak_ptr的用處C++指標
- C/C++引用和指標的聯絡和區別C++指標
- 再學C/C++ 之 指標常量 和 常量指標C++指標
- [C++] 成員函式指標和函式指標C++函式指標
- c++中指標和引用的區別?C++指標
- C++中指標和引用的區別C++指標
- C++的未來和指標C++指標
- C++ this 指標C++指標
- C++ 指標C++指標
- 這裡是值引用還是指標引用?指標
- 【C++系列】指標物件和物件指標的區別C++指標物件
- GO切片傳值/引用/指標Go指標
- 引用的底層為指標指標
- C++引用比指標的好處C++指標
- C++引用與指標的比較C++指標