1. 程式人生 > >指標(三)————指標與陣列

指標(三)————指標與陣列

指標與陣列

指標和陣列是密切相關的。事實上,指標和陣列在很多情況下是可以互換的。例如,一個指向陣列開頭的指標,可以通過使用指標的算術運算或陣列索引來訪問陣列。

#include <iostream>
 
using namespace std;
const int MAX = 3;
 
int main ()
{
   int  var[MAX] = {10, 100, 200};//這裡var是一個數組,陣列本質上是一個指標,指向陣列的第一個元素的地址,
 
   for (int i = 0; i < MAX; i++)
   {
      *var = i;    // 對var進行取值,並且因為var是一個指標,相當於賦予這個地址的值為i
   }
   *(var + 2) = 500;//將var[2]的值賦值為500

   //var++;//這樣寫就是錯誤的,因為var是一個指向陣列開頭的常量,不能改變其值
   for (int j = 0; j < MAX; j++)
   {
    cout<<var[j]<<endl;     
   }
   
   return 0;
}

輸出

2  //可以看出,var為陣列中的第一個元素的地址,這裡只能改變第一個元素的值,其他的位置的值無改變
100
500
請按任意鍵繼續. . .



指標陣列

  可能有一種情況,我們想要陣列儲存指向int或char或其他資料型別的指標。下面是一個指向整數的指標陣列的宣告。

int *ptr[5]

此處,把ptr宣告為一個數組,由5個元素,每個元素都是一個指向int值的指標,

#include <iostream>
 
using namespace std;
const int MAX = 3;
 
int main ()
{
   int  var[MAX] = {10, 100, 200};
   int *ptr[MAX];
 
   for (int i = 0; i < MAX; i++)
   {
      ptr[i] = &var[i]; // 賦值為整數的地址
   }
   for (int i = 0; i < MAX; i++)
   {
      cout << "Value of var[" << i << "] = ";
      cout << ptr[i] << endl;
	  cout <<"這個位置原來儲存的值為" <<*ptr[i] << endl;
	  *ptr[i]+=1;
	   cout <<"這個位置+1被改變後的值為" <<*ptr[i] << endl;
   }
   cout <<"通過指標的作用,成功將陣列的每個元素的值做了改變"<<endl ;
   for (int i = 0; i < MAX; i++)
   {
      cout << var[i]<<endl;
   }
   return 0;
}

執行結果

Value of var[0] = 008FFD04
這個位置原來儲存的值為10
這個位置+1被改變後的值為11
Value of var[1] = 008FFD08
這個位置原來儲存的值為100
這個位置+1被改變後的值為101
Value of var[2] = 008FFD0C
這個位置原來儲存的值為200
這個位置+1被改變後的值為201
通過指標的作用,成功將陣列的每個元素的值做了改變
11
101
201
請按任意鍵繼續. . .