プログラミング言語 C の新機能 Part XX: ARR#0:可変長配列: sizeof
(1999/08/09 [月])
新しい C 言語で可変長配列が使用できることはわかりましたが、では C 言語の演算子 sizeof や、typedef を可変長配列に対して使用した場合にはどうなるでしょうか。まず始めに sizeof 演算子を適用するとどうなるかを示します。次回に typedef を示します。
getN 関数に引数 n を渡し、その大きさ分のバッファ buf を宣言します。そしてその大きさを sizeof で関数の戻り値として返します。main 関数では、引数に値を与え、戻り値を sz 変数に入れています。結果は、図からわかるように、引数と同じ値が sz に入ります。つまり、getN で sizeof している大きさは、静的に計算される値ではなく、実行時に動的に取られた値を返すことになります。
size_t getN(int n) { unsigned char buf[n]; return sizeof(buf); } main() { size_t sz; sz = getN(1); //sz == 1 sz = getN(256); //sz == 256 sz = getN(1024); //sz == 1024 } |
getN 関数に引数 n を渡し、その大きさ分のバッファ buf を宣言します。そしてその大きさを sizeof で関数の戻り値として返します。main 関数では、引数に値を与え、戻り値を sz 変数に入れています。結果は、図からわかるように、引数と同じ値が sz に入ります。つまり、getN で sizeof している大きさは、静的に計算される値ではなく、実行時に動的に取られた値を返すことになります。
by seclan