溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C++中指針引用的示例分析

發(fā)布時(shí)間:2021-11-11 13:28:54 來源:億速云 閱讀:118 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹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)修改指針變量。

我用兩張圖來告訴你指針的引用為什么有用:

C++中指針引用的示例分析

C++中指針引用的示例分析

什么叫局部修改?

舉個(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)行截圖

C++中指針引用的示例分析

在執(zhí)行swap()函數(shù)的時(shí)候就是執(zhí)行中。

C++中指針引用的示例分析

可以發(fā)現(xiàn)在執(zhí)行swap()函數(shù)的時(shí)候確實(shí)修改了地址,也交換了a、b的值。

C++中指針引用的示例分析

但是,當(dāng)我們?cè)趍ain()函數(shù)中輸出a、b的時(shí)候,完全沒有交換。

什么叫全局修改?

同樣的代碼,我只改一個(gè)地方。

C++中指針引用的示例分析

來看看會(huì)發(fā)生什么改變。

運(yùn)行截圖

C++中指針引用的示例分析

交換前: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è)資訊頻道!

向AI問一下細(xì)節(jié)

免責(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)容。

c++
AI