溫馨提示×

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

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

C++的array和&array有哪些區(qū)別

發(fā)布時(shí)間:2022-08-25 15:16:07 來(lái)源:億速云 閱讀:101 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下C++的array和&array有哪些區(qū)別的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

要檢查這一點(diǎn),首先可以想到的是以下程序:

#include <iostream>
using namespace std;
int main()
{
   int array[5]; 
   cout<<"array= "<<array<<" ,&array= "<<&array<<endl;
   return 0;
}

“ array ”和“ &array ”輸出的地址是相同。雖然地址的內(nèi)容相同,但它們是不同類型的地址。這才是“ array ”和“ &array ”真正的區(qū)別。

為了顯示這種差異,修改一下上面的程序:

#include <iostream>
using namespace std;
 
int main()
{
    
    int array[5];
    cout<<"array= "<<array<<" ,&array= "<<&array<<endl;
    cout<<"array+1= "<<array+1<<endl;
    cout<<"&array+1= "<<&array+1<<endl;
    
    return 0;
}

運(yùn)行結(jié)果:

C++的array和&array有哪些區(qū)別

 將整數(shù)添加到指針時(shí)會(huì)指向該指針類型的下一個(gè)地址。從輸出結(jié)果可以看出:

  • array+1輸出的結(jié)果中地址值相較于array增加了4個(gè)字節(jié)。

  • &array+1輸出的結(jié)果中地址值相較于&array增加了20個(gè)字節(jié)(0x14 bytes)。

通過(guò)這個(gè)結(jié)果可以推斷出:

“ array ”是“指向 array 的第一個(gè)元素的指針”,而“ &array ”是“指向 擁有5 個(gè) int 元素的整個(gè)數(shù)組的指針”。

這個(gè)邏輯也可以擴(kuò)展到多維數(shù)組。假設(shè) twoDarray[5][4] 是一個(gè)二維數(shù)組。這里,“twoDarray”是一個(gè)指向擁有4個(gè)int型元素?cái)?shù)組的指針,而“&twoDarray”是指向擁有5個(gè)元素,每個(gè)元素是擁有4個(gè)int型元素的數(shù)組的,數(shù)組的指針”??梢允褂贸绦虼蛴y(cè)試。 

所以結(jié)論是:任何數(shù)組名稱本身都是指向數(shù)組第一個(gè)元素的指針,它更像是&array[0]。 但數(shù)組名稱的 &(即地址)是指向整個(gè)數(shù)組本身的指針。

在使用其它的指針變量通過(guò)賦值符號(hào)保存地址值時(shí)。數(shù)組名稱既然代表的是第一個(gè)元素,那么聲明指針變量時(shí)就是:元素類型* 指針名稱;而對(duì)于&數(shù)組名稱,就需要聲明一個(gè)指向數(shù)組的指針保存&array的值,要注意書寫方式,指向數(shù)組的指針的書寫方式與指向函數(shù)的指針有些類似。

int* p1 = array;
int* p2 = &array[0];
int    (*p3)[5] = &array;

如果感覺(jué)指向數(shù)組的指針書寫形式過(guò)于復(fù)雜,也可以直接使用auto推斷類型:

int* p1 = array;
int* p2 = &array[0];
int    (*p3)[5] = &array;
auto p4 = &array;

以上就是“C++的array和&array有哪些區(qū)別”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(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)容。

AI