首先宣告名稱為arr大小為10的int陣列,接著分別輸出arr、&arr[0]和&arr
#include <iostream>
int main()
{
int arr[10] = { 0 };
std::cout << "arr\t" << arr << std::endl;
std::cout << "&arr[0]\t" << &arr[0] << std::endl;
std::cout << "&arr\t" << &arr << std::endl;
}
//輸出結果
// arr 006FFC80
// &arr[0] 006FFC80
// &arr 006FFC80
我們可以看到直接輸出陣列變數時會出現陣列中第一個元素的位址
輸出&arr[0]也會出現陣列中第一個元素的位址,其中arr[0]代表第零個元素,而將&加在前面則代表取得其位址,也就是arr[0]的位址
2而&arr代表輸出arr變數位址,其位址就是第零個元素的位址,也就等於arr[0]的位址,所以輸出的結果會與前兩個相同
這時我們宣告一個名稱為p的int指標,將arr的位址指派給它,並分別輸出p、&p[0]和&p
#include <iostream>
int main()
{
int arr[10] = { 0 };
std::cout << "arr\t" << arr << std::endl;
std::cout << "&arr[0]\t" << &arr[0] << std::endl;
std::cout << "&arr\t" << &arr << std::endl;
int* p = arr;
std::cout << "p\t" << p << std::endl;
std::cout << "&p[0]\t" << &p[0] << std::endl;
std::cout << "&p\t" << &p << std::endl;
}
//輸出結果
// p 006FFC80
// &p[0] 006FFC80
// &p 006FFC74
這時p指標中儲存的是arr的位址,所以輸出的自然也就和arr的位址相同
&p[0]指的是p[0]這個元素的位址,因為p指標是指向arr陣列的,所以當存取p[0]時會去尋找arr[0],而自然其位址也就會等於arr[0]的位址
比較特別的是&p,&p代表取得p的位址,而因為p是指標,我們是取得p的位址,所以和arr的位址就不會是同一個了