程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> c++ 指針point 和引用reference的區別

c++ 指針point 和引用reference的區別

編輯:C++入門知識

1.reference一定得代表某個對象,即reference必須有初值;而point沒有這種要求,因此它可以有null pointers。

2.沒有所謂得null reference意味著references可能會比使用pointers更有效率,因為使用reference之前不需要測試其有效性。

3.pointer可以被重新賦值,指向另外一個對象,而reference卻總是指向它最初獲得的那個對象,類似於常量指針。

注意這裡使用的誤區:

[cpp] 
string a1("Jack"); 
string a2("Rose"); 
 
string &rs = a1; 
string *ps = &a1; 
上面的rs和ps都是指向了a1,若使用下面語句:
[cpp] 
rs = a2; 
此時rs仍然指向a1,但是a1的值現在變成了“Jack”;
而改變指針的值,
[cpp]
ps = &a2; 
此時ps指向a2,並且a1沒有變化。
這個例子完全可以解釋引用就是一個指向常量的地址,如果將引用賦一個不同的值,那麼不是改變了引用的值,而是改變的值的地址。而指針則不會出現這種情況。
因此,需要考慮“不指向任何對象”的可能性或者“在不同的時間指向不同的對象”,只能采用pointer。而當確定“總是會代表某個對象”,而且“一旦代表了該對象就不能更改”,這時就采用reference。

還有一點,在c++中改變表達式的常量性和變異性的轉型操作符為const_cast,而const_cast仍然不能修改reference的指向對象的不變性。

4.最後一點,為了辨別是指向object還是object pointer數組時,例如數組int a[5],現在要使用a[2]的指針,那麼可以使用*a[2],而這種用法讓人產生誤解,以為是一個指針數組(實際上指針數組的表示方法為(*a)[2]),那麼最好用reference來代替,消除誤解。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved