C++的array和&array有什么區(qū)別
如果在C++中定義了一個數(shù)組,例如“ int array[5] ”,那么“ array ”或“ &array ”是什么意思?它們是相同的還是不同的?讓我們一探究竟!
要檢查這一點,首先可以想到的是以下程序:
#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;
}
運行結(jié)果:

將整數(shù)添加到指針時會指向該指針類型的下一個地址。從輸出結(jié)果可以看出:
- array+1輸出的結(jié)果中地址值相較于array增加了4個字節(jié)。
- &array+1輸出的結(jié)果中地址值相較于&array增加了20個字節(jié)(0x14 bytes)。
通過這個結(jié)果可以推斷出:
“ array ”是“指向 array 的第一個元素的指針”,而“ &array ”是“指向 擁有5 個 int 元素的整個數(shù)組的指針”。
這個邏輯也可以擴(kuò)展到多維數(shù)組。假設(shè) twoDarray[5][4] 是一個二維數(shù)組。這里,“twoDarray”是一個指向擁有4個int型元素數(shù)組的指針,而“&twoDarray”是指向擁有5個元素,每個元素是擁有4個int型元素的數(shù)組的,數(shù)組的指針”。可以使用程序打印測試。
所以結(jié)論是:任何數(shù)組名稱本身都是指向數(shù)組第一個元素的指針,它更像是&array[0]。 但數(shù)組名稱的 &(即地址)是指向整個數(shù)組本身的指針。
在使用其它的指針變量通過賦值符號保存地址值時。數(shù)組名稱既然代表的是第一個元素,那么聲明指針變量時就是:元素類型* 指針名稱;而對于&數(shù)組名稱,就需要聲明一個指向數(shù)組的指針保存&array的值,要注意書寫方式,指向數(shù)組的指針的書寫方式與指向函數(shù)的指針有些類似。
int* p1 = array; int* p2 = &array[0]; int (*p3)[5] = &array;
如果感覺指向數(shù)組的指針書寫形式過于復(fù)雜,也可以直接使用auto推斷類型:
int* p1 = array; int* p2 = &array[0]; int (*p3)[5] = &array; auto p4 = &array;
本文部分內(nèi)容參自:What’s difference between “array” and “&array” for “int array[5]” ?
到此這篇關(guān)于C++的array和&array有什么區(qū)別的文章就介紹到這了,更多相關(guān)C++ array和&array內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux c 查找使用庫的cflags與libs的方法詳解
本篇文章是對在linux中使用c語言查找使用庫的cflags與libs的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C++ Boost Coroutine使用協(xié)程詳解
通過Boost.Coroutine,可以在C++中使用協(xié)程。協(xié)程是其他編程語言的一個特性,通常使用關(guān)鍵字yield來表示協(xié)程。在這些編程語言中,yield可以像return一樣使用2022-11-11

