最終的には以下のような動的配列の内容を表示するプログラムを書きたいとする。
#include <stdio.h> #include <stdlib.h> int main () { int a_N = 5; int *a = (int *)calloc(a_N, sizeof(int)); int i = 0; for (i = 0; i < a_N; i++) { printf("a[%d]=%d\n", i, a[i]); } return 0; }
動的配列を宣言した場合は配列へのポインタを使って処理を書かなければいけないので、静的配列で書く場合も静的配列へのポインタを宣言する。また、静的配列の要素数はsizeof演算子で取得出来るのでこれを適当な変数に保存しておく。変数に保存する理由は、静的配列だとsizeofで逃げれるが、動的配列だと逃げ道が無いので、あらかじめ保存しておく以外方法が無いからである。このようにすることで、処理部分の変更無しに動的配列と静的配列の変換が出来る。
#include <stdio.h> int main () { int _a[5] = {0}; int a_N = sizeof _a / sizeof _a[0]; int *a = _a; int i = 0; for (i = 0; i < a_N; i++) { printf("a[%d]=%d\n", i, a[i]); } return 0; }
纏めると以下の2点である。
- 静的配列を宣言したら同時にポインタ宣言し、以降はポインタでコードを書く。
- 配列要素数を適当な変数に保存する。