91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-11-11 13:28:54 來源:億速云 閱讀:128 作者:小新 欄目:開發技術

這篇文章主要介紹C++中指針引用的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

指針和引用形式上很好區別,但是他們似乎有相同的功能,都能夠直接引用對象,對其進行直接的操作。

首先,引用不可以為空,但指針可以為空。前面也說過了引用是對象的別名,引用為空——對象都不存在,怎么可能有別名!故定義一個引用的時候,必須初始化。因此如果你有一個變量是用于指向另一個對象,但是它可能為空,這時你應該使用指針;如果變量總是指向一個對象,i.e.,你的設計不允許變量為空,這時你應該使用引用。

如指針一樣,指針的引用容易使人困惑。

我們注意到類似下面這種語法

void func(int *&x)
{
	++x;
}

我猜你可能對int *&x有點疑惑。

這叫做指針的引用

int *&x

不要覺得看著復雜,其實一點也不復雜。

我幫你拆開來看:

按照C++程序員的習慣,指針“*”號是和類型放在一起的。
C++中&是引用符號。
我們需要注意的是“引用”不產生副本,而是給原變量起別名。
對引用操作就是對原變量操作。

所以只需要這樣:

int* &x

一目了然!

對指針變量本身的修改無法作用到原指針變量,

所以需要通過引用來實現修改指針變量。

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

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

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

什么叫局部修改?

舉個栗子

我用代碼來給你解釋解釋什么叫局部修改:

#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;
}

猜一猜結果。

輸出的結果:

交換前:a=1,b=3
交換前(地址):p1=6422028
交換前(地址):p2=6422024
交換交換中:a=3,b=1
交換中(地址):p1=6422024
交換中(地址):p2=6422028
交換后:a=1,b=3
交換后(地址):p1=6422028
交換后(地址):p2=6422024

運行截圖

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

在執行swap()函數的時候就是執行中。

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

可以發現在執行swap()函數的時候確實修改了地址,也交換了a、b的值。

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

但是,當我們在main()函數中輸出a、b的時候,完全沒有交換。

什么叫全局修改?

同樣的代碼,我只改一個地方。

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

來看看會發生什么改變。

運行截圖

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

我就簡簡單單添加了“&”,竟然如此神奇!

所以我們可以發現:

指針的引用能夠全局修改指針變量!

引用是C++中很強大的語法,在編程中極其實用。

明白這個語法很關鍵,因為這個在樹和圖的算法中應用廣泛。

以上是“C++中指針引用的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

兰坪| 泸溪县| 康马县| 三门县| 德兴市| 蒙阴县| 新沂市| 洛南县| 上高县| 逊克县| 铜川市| 永吉县| 桃江县| 白朗县| 正镶白旗| 揭阳市| 阿拉尔市| 阳城县| 朝阳县| 农安县| 穆棱市| 永丰县| 南通市| 高邑县| 昌都县| 年辖:市辖区| 墨竹工卡县| 阿克苏市| 武清区| 镇雄县| 嘉禾县| 平泉县| 犍为县| 阿拉善盟| 通城县| 突泉县| 边坝县| 孟津县| 巴里| 秭归县| 岳普湖县|