指標和引用形式上很好區別,但是他們似乎有相同的功能,都能夠直接引用物件,對其進行直接的操ydolap作。
首先,引用不可以為空,但指標可以為空。前面也說過了引用是物件的別名,引用為空——物件都不存在,怎麼可能有別名!故定義乙個引用的時候,必須初始化。因此如果你有乙個變數是用於指向另乙個物件,但是它可能為空,這時你應該使用指標;如果變數總是指向乙個物件,i.e.,你的設計不允許變數為空,這時你應該使用引用。
如指標一樣,指標的引用容易使人困惑。
我們注意到類似下面這種語法
void func(int *&x)
我猜你可能對int *&x有點疑惑。
這叫做指標的引用。
int *&x
不要覺得看著複雜,其實一點也不複雜。
我幫你拆開來看:
按照c++程式設計師的習慣,指標「*」號是和型別放在一起的。
c++中&是引用符號。
我們需要注意的是「引用」不產生副本,而是給原變數起別名。
對引用操作就是對原變數操作。
所以只需要這樣:
int* &x
一目了然!
對指標變數本身的修改無法作用到原指標變數,
所以需要通過引用來實現修改指標變數。
我用兩張圖來告訴你指標的引用為什麼有用:
舉個栗子
我用**來給你解釋解釋什麼叫區域性修改:
程式設計客棧
#include
void swydolapap(int* p1,int* p2)
int main()
猜一猜結果。
輸出的結果:
交換前:a=1,b=3
交換前(位址):p1=6422028
交換前(位址):p2=6422024
交換交換中:a=3,b=1
交換中(位址):p1=6422024
交換中(位址):p2=6422028
交換後:a=1,b=3
交換後(位址):p1=6422028
交換後(位址):p2=6422024
執行截圖
在執行swap()函式的時候就是執行中。
可以發現在執行swap()函式的時候確實修改了位址,也交換了a、b的值。
但是,當我們在main()函式中輸出a、b的時候,完全沒有交換。
同樣的**,我只改乙個地方。
來看看會發生什麼改變。
執行截圖
交換前ydolap:a=1,b=3
交換前(位址):p1=6422044
交換前(位址):p2=6422040
交換中:a=3,b=1
交換中(位址):p1=6422040
交換中(位址):p2=6422044
交換後:a=3,b=1
交換後(位址):p1=6422040
交換後(位址):p2=6422044
我就簡簡單單新增了「&」,竟然如此神奇!
所以我們可以發現:
指標的引用能夠全域性修改指標變數!
引用是c++中很強大的語法,在程式設計中極其實用。
明白這個語法很關鍵,因為這個在樹和圖的演算法中應用廣泛。
c 中指標與引用的使用
先說結論 使用指標的情況 使用引用 它們的異同 相同點 不同點char pc 0 char rc pc 引用指向空值string s1 foo string s2 bar string rs s1 string ps s1 rs s2 rs仍引用s1,實際是把s2賦值給s1,所以s1現在的值是 ba...
c 中 指標的指標 與 指標的引用
我的生活,我的點點滴滴!今天在看一些c 開源 時,無意間看到下面這段 突然發覺看起好陌生,完全不懂這樣用的意義是什麼呀?void director popscene const std function callback else auto callback scene scene director...
C 中 指標引用)與 (指標)的區別
指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值...