C & C++ FAQ
|
C | C++ | 配列の要素数を取得するにはどうすればよいでしょうか。 |
nxの初期化子に使われているsizeof(x)は配列xの全体の大きさで、sizeof(x[0])は、要素1個の大きさです。したがって、nxは、xの要素数7で初期化されることになります。したがって、プログラム中、これ以降は、配列の要素数が必要な箇所には、7でなくnxと書くことができます。このようにしておけば、配列の要素数を変更する際は、xの宣言だけを変更すればよいことになります。int x[7]; int nx = sizeof(x) / sizeof(x[0]);
と宣言したら、どうなるでしょうか。これでも、nxはきちんと7で初期化され、問題ありません。しかし、《配列の要素に格納する値が大きくなった。int型でなく、long型に変更しよう》と仕様の変更が行われた際に、xの宣言だけを書きかえて、int x[7]; int nx = sizeof(x) / sizeof(int);
としたら、おかしなことになってしまいます(もちろん、処理系によっては、sizeof(int)とsizeof(long)が等しいこともあり得ますので、偶然うまくいくかもしれませんが…)。long x[7]; int nx = sizeof(x) / sizeof(int);
FAQ | 2次元配列の要素数を取得するにはどうすればよいでしょうか。 |