BohYoh.comトップページへ
C & C++ FAQ
目次

C C++ 配列の要素数を取得するにはどうすればよいでしょうか。

 配列の要素数は、配列全体の大きさを要素の大きさで割ることによって求めることができます。典型的な例を示します。

int x[7]; int nx = sizeof(x) / sizeof(x[0]);

nxの初期化子に使われているsizeof(x)は配列xの全体の大きさで、sizeof(x[0])は、要素1個の大きさです。したがって、nxは、xの要素数7で初期化されることになります。したがって、プログラム中、これ以降は、配列の要素数が必要な箇所には、7でなくnxと書くことができます。このようにしておけば、配列の要素数を変更する際は、xの宣言だけを変更すればよいことになります。
 それでは、

int x[7]; int nx = sizeof(x) / sizeof(int);

と宣言したら、どうなるでしょうか。これでも、nxはきちんと7で初期化され、問題ありません。しかし、《配列の要素に格納する値が大きくなった。int型でなく、long型に変更しよう》と仕様の変更が行われた際に、xの宣言だけを書きかえて、

long x[7]; int nx = sizeof(x) / sizeof(int);

としたら、おかしなことになってしまいます(もちろん、処理系によっては、sizeof(int)とsizeof(long)が等しいこともあり得ますので、偶然うまくいくかもしれませんが…)。
 したがって、要素数を格納する変数が必要な場合は、このプログラムのように宣言するテクニックを使いましょう。

柴田望洋『情報応用特論Ⅰ 講義ノート -2000年度版-』(講義プリント)に加筆修正

■ 参照 ■
FAQ 2次元配列の要素数を取得するにはどうすればよいでしょうか。

戻る

BohYoh.comロゴ