1. 程式人生 > >陣列名與陣列名前加取地址符

陣列名與陣列名前加取地址符

程式碼:

int main()

{
int a[10]={1,2,3,4,5,6,7,8,9,10};

cout<<a<<"\t"<<&a<<endl;
cout<<a+1<<"\t"<<&a+1<<endl;
return 0;

}

結果:


我們知道陣列名與陣列名取地址所得到的地址都是一樣的,由第一行的輸出可以驗證這一結論。那麼如果都在這基礎上加上指標運算呢,一開始我也覺得結果是相同的,但事實是讓我懵逼的。由第二行輸出可以知道a+1後指標指向的是組的第二個元素,而&a+1後指標指向的是整個陣列記憶體空間的末尾。這是為什麼呢?這到底是a的心靈的扭曲還是&a道德的淪喪?

言歸正傳。。

由於陣列和指標的關係,a相當於一個指標,指向的是第一個元素,也就是傳說中陣列的首地址。此時這個指標的步長是陣列元素型別所佔的位元組數,在此為4B。而&a這貨代表的不是a這個變數的地址,而是陣列元素的地址,它代表整個陣列!!所以&a這個指標的步長是整個陣列所佔的位元組數!!也就是說a的型別是int[10],&a的型別是int(*)[10],是個指向int[10]陣列的指標,&a[0]的型別是int*。