1-14-2. 配列へのポインタ

公開日: 17:26 1. 基本編/1-14. 配列/1-14-2. 配列へのポインタ


ポインタを理解していないとこの記事は理解し難いかもしれません。

そのためポインタを理解していると仮定して始めます。配列名は配列の最初の要素への恒久的なポインタです。従って、次の宣言
double balance[50];

balanceは配列balanceの先頭要素&balance[0]へのポインタです。次のコードはbalanceの先頭要素のアドレスをpに割り当てます。
double *p;
double balance[10];

p = balance;

配列名をポインタとして使うこと、及びその逆も問題ありません。従って*(balance + 4)はbalance[4]にあるデータにアクセスする合法的な手段です。

一旦先頭要素のアドレスをpに保存すると、配列要素に*p、*(p+1)、*(p+2)などを使ってアクセスできます。以下はポインタを使って配列要素にアクセスする例です。
#include <iostream>
using namespace std;
 
int main ()
{
   // 長さ5の配列 
   double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};
   double *p;

   p = balance;
 
   // 配列の要素を出力
   cout << "ポインタを使ったアクセス " << endl; 
   for ( int i = 0; i < 5; i++ )
   {
       cout << "*(p + " << i << ") : ";
       cout << *(p + i) << endl;
   }

   cout << "balanceをアドレスとしたアクセス " << endl;
   for ( int i = 0; i < 5; i++ )
   {
       cout << "*(balance + " << i << ") : ";
       cout << *(balance + i) << endl;
   }
 
   return 0;
}

上のコードをコンパイルし実行すると、次の結果が得られます。
ポインタを使ったアクセス
*(p + 0) : 1000
*(p + 1) : 2
*(p + 2) : 3.4
*(p + 3) : 17
*(p + 4) : 50
balanceをアドレスとしたアクセス
*(balance + 0) : 1000
*(balance + 1) : 2
*(balance + 2) : 3.4
*(balance + 3) : 17
*(balance + 4) : 50

上の例ではpはdouble型の変数のアドレスを保存する、doubleへのポインタです。一旦pにアドレスを 入れると、*pはpに保存されたアドレスの指す値を利用可能になります。
  • ?±??G???g???[?d????u?b?N?}?[?N???A

0 件のコメント :

コメントを投稿