配列の大きさは変数によって動的に変えられる。

「ISO/IEC 9899 : 1999 - Programming Language C」(略称C99)という新しい規格のC言語では、配列の宣言が、そのサイズを変数で指定できるようになった。いわゆる、可変長配列 (Variable-size array) が使える。

たとえば、以下の関数は巨大な10進数を2進数に変換するものだが、一時的に加算の中間結果を保存するため、配列 tmp[] が必要。しかし、関数が呼び出されるまでは配列のサイズが判らないので、いままでのCなら malloc関数等を利用してメモリを確保しないといけなかったが、可変長配列を使えば、すっきりした書き方ができる。

    char tmp[dec_len]

勿論、配列のサイズとなる、変数dec_lenの値は0(ゼロ)やマイナスにならないよう、きちんとしたチェックはお忘れなく。

ただ、可変長配列はどこでも使えるわけではない。可変長配列が使えるのは、ブロックの中か関数引数/プロトタイプの中だけで、グローバル変数として宣言したり、struct や union の中のメンバとして宣言したりすることはできない。加えて、static や extern 付きの配列は、可変長配列にできない。

また、malloc関数はメモリのヒープ領域を使うのに対し、可変長配列はスタック領域を使うので、ご注意を。つまり、mallocのように、メモリほ確保しておいて、呼び出された親関数に使わせることは可変長配列では不可能!

あくまでも、自関数内か、子孫関数内で使うもの。

Comments are closed.

Post Navigation