C言語/配列とポインタ

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動

テンプレート:正確性

配列とポインタの基本[編集]

配列とポインタには密接な関係がある。

式の中では、配列は「その先頭要素へのポインタ」に読み替えられる。

また、p[i]は*(p+i)の簡便記法である。

[1]

1次元配列を指すポインタ[編集]

次の例のように、 ポインタに配列のメモリアドレスを代入して、 ポインタ演算によって配列にアクセスすることができる。

//例 1次元の配列を指すポインタの使用例
#include <stdio.h>

int main(void) {
  int a[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29};
  int *pa = a;
    //ポインタpaを配列aの先頭アドレスで初期化する。
      for (int i = 0; i < sizeof a / sizeof *a; i++)
          printf("%d ", a[i]); //配列aの内容を表示する。
  printf("\n");
  for (int i = 0; i < 10; i++)
    printf("%d ", *(pa + i)); //ポインタpaを使って配列aの内容を表示する。
  printf("\n");
  return 0;
}

多次元配列を指すポインタ[編集]

多次元配列を指すポインタを使う時は、 配列の領域がメモリ上にどう確保されるか意識する必要がある。 例えば3行4列の2次元配列のy行x列にポインタを使ってアクセスするには、 次のように記述する。

*(ポインタの識別子+y*4+x)
//例 2次元の配列を指すポインタの使用例
#include <stdio.h>

int main(void) {
  int a[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
  int *pa;
  pa = a[0];

  //配列aの内容を表示する。
  for (int y = 0; y < 3; ++y) {
    for (int x = 0; x < 4; ++x) {
      printf("%2d ", a[y][x]);
    }
    printf("\n");
  }

  //ポインタpaを使って配列aの内容を表示する。
  for (int y = 0; y < 3; ++y) {
    for (int x = 0; x < 4; ++x) {
      printf("%2d ", *(pa + (y * 4) + x));
    }
    printf("\n");
  }
}

脚註[編集]

  1. ^ 前橋和弥著『C言語 ポインタ完全制覇』p.061 平成13年6月25日初版第4刷発行

参考文献[編集]

  • 前橋和弥著『C言語 ポインタ完全制覇』平成13年6月25日初版第4刷発行