欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中指針的引用*&的具體使用

 更新時(shí)間:2021年11月11日 11:25:59   作者:HUSTER593  
本文主要介紹了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)用廣泛。

到此這篇關(guān)于C++中指針的引用*&的具體使用的文章就介紹到這了,更多相關(guān)C++指針的引用*&內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳細(xì)聊一聊algorithm中的排序算法

    詳細(xì)聊一聊algorithm中的排序算法

    <algorithm>是C++標(biāo)準(zhǔn)程序庫中的一個(gè)頭文件,定義了C++?STL標(biāo)準(zhǔn)中的基礎(chǔ)性的算法(均為函數(shù)模板),下面這篇文章主要給大家介紹了關(guān)于algorithm中排序算法的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • C語言安全之?dāng)?shù)組長(zhǎng)度與指針實(shí)例解析

    C語言安全之?dāng)?shù)組長(zhǎng)度與指針實(shí)例解析

    這篇文章主要介紹了C語言安全之?dāng)?shù)組長(zhǎng)度與指針,需要的朋友可以參考下
    2014-07-07
  • 八皇后問題的相關(guān)C++代碼解答示例

    八皇后問題的相關(guān)C++代碼解答示例

    這篇文章主要介紹了八皇后問題的相關(guān)C++代碼解答示例,文中包括ACM競(jìng)賽的八皇后相關(guān)知識(shí)的練習(xí)實(shí)例,需要的朋友可以參考下
    2015-08-08
  • C語言關(guān)于二叉樹中堆的創(chuàng)建和使用整理

    C語言關(guān)于二叉樹中堆的創(chuàng)建和使用整理

    大家好,這里是針對(duì)二叉樹中堆結(jié)構(gòu)的順序儲(chǔ)存,整理出來一篇博客供我們一起復(fù)習(xí)和學(xué)習(xí),如果文章中有理解不當(dāng)?shù)牡胤?還希望朋友們?cè)谠u(píng)論區(qū)指出,我們相互學(xué)習(xí),共同進(jìn)步
    2022-08-08
  • C語言實(shí)現(xiàn)變色進(jìn)度條

    C語言實(shí)現(xiàn)變色進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)一個(gè)變色的進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 帶你了解C++的IO流

    帶你了解C++的IO流

    這篇文章主要介紹了C++ IO流的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2021-09-09
  • opencv實(shí)現(xiàn)三幀差法解析

    opencv實(shí)現(xiàn)三幀差法解析

    這篇文章主要介紹了opencv實(shí)現(xiàn)三幀差法的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C語言程序中遞歸算法的使用實(shí)例教程

    C語言程序中遞歸算法的使用實(shí)例教程

    這篇文章主要介紹了C語言程序中遞歸算法的使用實(shí)例教程,遞歸經(jīng)常被用來進(jìn)行階乘和比較大小等計(jì)算工作,文中舉的都是一些基礎(chǔ)的例子,需要的朋友可以參考下
    2016-04-04
  • C語言可變參數(shù)函數(shù)詳解

    C語言可變參數(shù)函數(shù)詳解

    在某些情況下我們希望函數(shù)的參數(shù)個(gè)數(shù)可以根據(jù)需要確定,因此c語言引入可變參數(shù)函數(shù)。典型的可變參數(shù)函數(shù)的例子有printf()、scanf()等,下面我就開始講解
    2021-08-08
  • 詳解C標(biāo)準(zhǔn)庫堆內(nèi)存函數(shù)

    詳解C標(biāo)準(zhǔn)庫堆內(nèi)存函數(shù)

    在C/C++語言中,我們知道內(nèi)存分為這幾種:程序全局變量?jī)?nèi)存、棧內(nèi)存、堆內(nèi)存。其中堆內(nèi)存就是通過malloc(new)來分配的內(nèi)存,本文我們來探討一下C標(biāo)準(zhǔn)庫堆內(nèi)存函數(shù)。
    2021-06-06

最新評(píng)論