關於指向數組的指針,撥亂反正:
short int height[10]; //int型的數組(short int 每個數據2字節)
cout << "height "<< height << endl
<< "height+1 "<< height + 1 << endl
<< "&height[0] " << &height[0] << endl
<< "&height+1 "<< &height + 1<< endl
<< "height+9 "<< height+9 << endl
<< "height+10 " << height + 10 << endl;
結果如下:
height 0136F900
height+1 0136F902
&height[0] 0136F900
&height+1 0136F914
height+9 0136F912
height+10 0136F914
可以看到:
height 與 &height[0] 值相等。
height+1 = height + 2 字節 = height + 1 個 short int 也即 一個數組元素。
height+9 爲 height[] 中最後一個元素的地址,height+10 爲該數組結束後的第一個地址。
&height +1=height+10,即執行 &height+1 的結果是地址跳到整個數組之後第一個地址。
即:
& 並不是不能用在數組名上,只是用在數組名和數組名[i]有所區別。例如:
int height[10];//int型的數組
cout << &height << endl;//&用在數組名上
cout << &height[0] << endl;//&用在數組第一個元素上
上面 &height[0] 就是取得是數組第一個元素的地址,假設地址爲 1000;&height 是直接對數組名進行取地址,這個時候就是取得是 height 整個數組的地址,指向包含 10 個元素的 int 型數組,地址範圍爲 1000~1036;
我們知道 height 等價於 &height[0],height+1 會將地址加 4 個字節;但 &height+1 就是將地址增加 10*4 個字節。