1、指標:系統為某一個變數開闢單元格,指標便指向此單元格的變數值。
2、陣列:系統為某一組數開闢一組單元格,陣列首地址便是你定義的陣列變數名。
陣列和指標的唯一區別是,不能改變陣列名稱指向的地址。
對於陣列來說,陣列的首地址,也可以用指標來表示操作,如:
int a[10];
int *p,n;
p = a;
對第一個元素取值,可以用幾種方法:
n =a[0];
n = *p;
n = p[0];
n = *(p+0) ;
但是以下語句則是非法的:
readings = totals; // 非法!不能改變 readings totals = dptr; // 非法!不能改變 totals
陣列名稱是指標常量。不能讓它們指向除了它們所代表的陣列之外的任何東西。
擴充套件資料
下面的程式定義了一個 double 陣列和一個 double 指標,該指標分配了陣列的起始地址。隨後,不僅指標符號可以與陣列名稱一起使用,而且下標符號也可以與指標一起使用。
int main()
{
const int NUM_COINS = 5;
double coins[NUM_COINS] = {0.05, 0.1, 0.25, 0.5, 1.0};
double *doublePtr; // Pointer to a double
// Assign the address of the coins array to doublePtr
doublePtr = coins;
// Display the contents of the coins array
// Use subscripts with the pointer!
cout << setprecision (2);
cout << "Here are the values in the coins array:\n";
for (int count = 0; count < NUM_COINS; count++)
cout << doublePtr [count] << " ";
// Display the contents of the coins array again, but this time use pointer notation with the array name!
cout << "\nAnd here they are again:\n";
cout << *(coins + count) << " ";
cout << endl;
return 0;
}
程式輸出結果:
Here are the values in the coins array: 0.05 0.1 0.25 0.5 1 And here they are again: 0.05 0.1 0.25 0.5 1
當一個數組的地址分配給一個指標時,就不需要地址運算子了。由於陣列的名稱已經是一個地址,所以使用 & 運算子是不正確的。但是,可以使用地址運算子來獲取陣列中單個元素的地址。
1、指標:系統為某一個變數開闢單元格,指標便指向此單元格的變數值。
2、陣列:系統為某一組數開闢一組單元格,陣列首地址便是你定義的陣列變數名。
陣列和指標的唯一區別是,不能改變陣列名稱指向的地址。
對於陣列來說,陣列的首地址,也可以用指標來表示操作,如:
int a[10];
int *p,n;
p = a;
對第一個元素取值,可以用幾種方法:
n =a[0];
n = *p;
n = p[0];
n = *(p+0) ;
但是以下語句則是非法的:
readings = totals; // 非法!不能改變 readings totals = dptr; // 非法!不能改變 totals
陣列名稱是指標常量。不能讓它們指向除了它們所代表的陣列之外的任何東西。
擴充套件資料
下面的程式定義了一個 double 陣列和一個 double 指標,該指標分配了陣列的起始地址。隨後,不僅指標符號可以與陣列名稱一起使用,而且下標符號也可以與指標一起使用。
int main()
{
const int NUM_COINS = 5;
double coins[NUM_COINS] = {0.05, 0.1, 0.25, 0.5, 1.0};
double *doublePtr; // Pointer to a double
// Assign the address of the coins array to doublePtr
doublePtr = coins;
// Display the contents of the coins array
// Use subscripts with the pointer!
cout << setprecision (2);
cout << "Here are the values in the coins array:\n";
for (int count = 0; count < NUM_COINS; count++)
cout << doublePtr [count] << " ";
// Display the contents of the coins array again, but this time use pointer notation with the array name!
cout << "\nAnd here they are again:\n";
for (int count = 0; count < NUM_COINS; count++)
cout << *(coins + count) << " ";
cout << endl;
return 0;
}
程式輸出結果:
Here are the values in the coins array: 0.05 0.1 0.25 0.5 1 And here they are again: 0.05 0.1 0.25 0.5 1
當一個數組的地址分配給一個指標時,就不需要地址運算子了。由於陣列的名稱已經是一個地址,所以使用 & 運算子是不正確的。但是,可以使用地址運算子來獲取陣列中單個元素的地址。