綾小路龍之介の素人思考

[C言語] 静的な配列用に書いたコードを動的(malloc,calloc)な配列でも使えるようにする

宣言した静的配列ではなく、この配列のポインタを宣言し、これを使って処理を書くこと。配列の要素数を変数に保存すること。

最終的には以下のような動的配列の内容を表示するプログラムを書きたいとする。

#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点である。

  1. 静的配列を宣言したら同時にポインタ宣言し、以降はポインタでコードを書く。
  2. 配列要素数を適当な変数に保存する。

リファレンス

  1. C言語 静的配列|動的配列 - Google 検索

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2009-12-21T19:01:52+09:00
  2. Modified: 2009-12-21T19:01:52+09:00
  3. Generated: 2017-07-15T23:09:18+09:00