在宣告一個陣列之後,陣列名稱用來參考至陣列的第一個元素的記憶體位址,例如在下面的程式中將指出,陣列arr與&arr[0]所指向的
位置是相同的:
#include <iostream> using namespace std;
int main() { int arr[10] = {0}; cout << "arr :\t\t" << arr << endl; cout << "&arr[0]: \t" << &arr[0] << endl;
return 0; }
執行結果:
arr
:
0x22ff40
&arr[0]: 0x22ff40
|
之前也曾經討論過,陣列的索引其實是相對於第一個記憶體位址的位移量。
之前也曾經討論過,陣列的索引其實是相對於第一個記憶體位址的位移量,下面這個程式以指標運算與陣列索引操作,顯示出相同的對應位址值:
#include <iostream> using namespace std;
int main() { const int length = 10; int arr[length] = {0}; int *ptr = arr;
for(int i = 0; i < length; i++) { cout << "&arr[" << i << "]: " << &arr[i]; cout << "\tptr+" << i << ": " << ptr+i; cout << endl; } return 0; }
執行結果:
&arr[0]:
0x22ff30
ptr+0: 0x22ff30
&arr[1]:
0x22ff34
ptr+1:
0x22ff34
&arr[2]:
0x22ff38
ptr+2:
0x22ff38
&arr[3]:
0x22ff3c
ptr+3:
0x22ff3c
&arr[4]:
0x22ff40
ptr+4:
0x22ff40
&arr[5]:
0x22ff44
ptr+5:
0x22ff44
&arr[6]:
0x22ff48
ptr+6:
0x22ff48
&arr[7]:
0x22ff4c
ptr+7:
0x22ff4c
&arr[8]:
0x22ff50
ptr+8:
0x22ff50
&arr[9]:
0x22ff54
ptr+9:
0x22ff54
|
在這個程式中,您將陣列的第一個元素位址指定給ptr,然後對ptr作遞增運算,每遞增一個單位,其與陣列相對應索引的元素之記憶體位址都相同,這可以說
明陣列索引的背後意義。
您也可以利用指標運算來取出陣列的元素值,如以下的程式所示:
#include <iostream> using namespace std;
int main() { const int length = 5; int arr[length] = {10, 20, 30, 40, 50}; int *ptr = arr;
// 以指標方式存取資料 for(int i = 0; i < length; i++) { cout << "*(ptr+" << i << "): " << *(ptr+i) << endl; } cout << endl;
// 以陣列方式存取資料 for(int i = 0; i < length; i++) { cout << "ptr[" << i << "]: " << ptr[i] << endl; } cout << endl;
// 以指標方式存取資料 for(int i = 0; i < length; i++) { cout << "*(arr+" << i << "): " << *(arr+i) << endl; } cout << endl; // 以陣列方式存取資料 for(int i = 0; i < length; i++) { cout << "arr[" << i << "]: " << arr[i] << endl; } cout << endl; return 0; }
執行結果:
*(ptr+0): 10
*(ptr+1): 20
*(ptr+2): 30
*(ptr+3): 40
*(ptr+4): 50
ptr[0]: 10
ptr[1]: 20
ptr[2]: 30
ptr[3]: 40
ptr[4]: 50
*(arr+0): 10
*(arr+1): 20
*(arr+2): 30
*(arr+3): 40
*(arr+4): 50
arr[0]: 10
arr[1]: 20
arr[2]: 30
arr[3]: 40
arr[4]: 50
|
在上面的程式中,您可以使用指標運算配合*運算子來取出陣列中的每個元素,也可以配合下標運算子來取出陣列元素。
|