您好,登錄后才能下訂單哦!
這篇文章主要介紹C++中指針引用的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
指針和引用形式上很好區(qū)別,但是他們似乎有相同的功能,都能夠直接引用對(duì)象,對(duì)其進(jìn)行直接的操作。
首先,引用不可以為空,但指針可以為空。前面也說過了引用是對(duì)象的別名,引用為空——對(duì)象都不存在,怎么可能有別名!故定義一個(gè)引用的時(shí)候,必須初始化。因此如果你有一個(gè)變量是用于指向另一個(gè)對(duì)象,但是它可能為空,這時(shí)你應(yīng)該使用指針;如果變量總是指向一個(gè)對(duì)象,i.e.,你的設(shè)計(jì)不允許變量為空,這時(shí)你應(yīng)該使用引用。
如指針一樣,指針的引用容易使人困惑。
我們注意到類似下面這種語法
void func(int *&x) { ++x; }
我猜你可能對(duì)int *&x
有點(diǎn)疑惑。
這叫做指針的引用。
int *&x
不要覺得看著復(fù)雜,其實(shí)一點(diǎn)也不復(fù)雜。
我?guī)湍悴痖_來看:
按照C++程序員的習(xí)慣,指針“*”號(hào)是和類型放在一起的。
C++中&是引用符號(hào)。
我們需要注意的是“引用”不產(chǎn)生副本,而是給原變量起別名。
對(duì)引用操作就是對(duì)原變量操作。
所以只需要這樣:
int* &x
一目了然!
對(duì)指針變量本身的修改無法作用到原指針變量,
所以需要通過引用來實(shí)現(xiàn)修改指針變量。
我用兩張圖來告訴你指針的引用為什么有用:
舉個(gè)栗子
我用代碼來給你解釋解釋什么叫局部修改:
#include <stdio.h> void swap(int* p1,int* p2) { int* temp=p1; p1=p2; p2=temp; printf("交換中:a=%d,b=%d \n",*p1,*p2); printf("交換中(地址):p1=%d \n",p1); printf("交換中(地址):p2=%d \n",p2); } int main() { int a=1,b=3; int *p1=&a,*p2=&b; // 交換前 printf("交換前:a=%d,b=%d \n",*p1,*p2); printf("交換前(地址):p1=%d \n",p1); printf("交換前(地址):p2=%d \n",p2); // 交換中 swap(p1,p2); // 交換后 printf("交換后:a=%d,b=%d \n",*p1,*p2); printf("交換后(地址):p1=%d \n",p1); printf("交換后(地址):p2=%d \n",p2); return 0; }
猜一猜結(jié)果。
輸出的結(jié)果:
交換前:a=1,b=3
交換前(地址):p1=6422028
交換前(地址):p2=6422024
交換交換中:a=3,b=1
交換中(地址):p1=6422024
交換中(地址):p2=6422028
交換后:a=1,b=3
交換后(地址):p1=6422028
交換后(地址):p2=6422024
運(yùn)行截圖
在執(zhí)行swap()函數(shù)的時(shí)候就是執(zhí)行中。
可以發(fā)現(xiàn)在執(zhí)行swap()函數(shù)的時(shí)候確實(shí)修改了地址,也交換了a、b的值。
但是,當(dāng)我們?cè)趍ain()函數(shù)中輸出a、b的時(shí)候,完全沒有交換。
同樣的代碼,我只改一個(gè)地方。
來看看會(huì)發(fā)生什么改變。
運(yùn)行截圖
交換前:a=1,b=3
交換前(地址):p1=6422044
交換前(地址):p2=6422040
交換中:a=3,b=1
交換中(地址):p1=6422040
交換中(地址):p2=6422044
交換后:a=3,b=1
交換后(地址):p1=6422040
交換后(地址):p2=6422044
我就簡(jiǎn)簡(jiǎn)單單添加了“&”,竟然如此神奇!
所以我們可以發(fā)現(xiàn):
指針的引用能夠全局修改指針變量!
引用是C++中很強(qiáng)大的語法,在編程中極其實(shí)用。
明白這個(gè)語法很關(guān)鍵,因?yàn)檫@個(gè)在樹和圖的算法中應(yīng)用廣泛。
以上是“C++中指針引用的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。