私の質問は、引数が渡されたときに
動的配列
可変長配列であることがどのくらい正確に振る舞うかです。可変長配列のsizeofの振る舞い(Cのみ)
の例を考えてみましょう。この例では
int fun(int num_of_chars)
{
char name_arr[num_of_chars] = {0};
/* Do something*/
return sizeof(name_arr);
}
戻り値は、コンパイル時定数ではないことは明らかです。サイズは実行時の値num_of_chars
に依存するためです。 C99標準(6.5.3.4)から
引用:
sizeof
オペレータは 発現またはタイプの括弧名前であってもよい、そのオペランドのサイズ(バイト数)が得られます。サイズは、オペランドのタイプ から決定されます。結果は整数です。オペランドの型が の可変長配列型の場合、オペランドは評価されます。それ以外の場合、オペランドは評価されず、結果は整数定数です。
Iは、[オペランドが評価される....]がsizeof()
ために渡された引数が
ダイナミックアレイ
可変長配列である場合、sizeof()
は「のように振る舞う」されていることから理解できることオペレータとしてではなくです。
私の理解は正しいですか?
'sizeof()'はまだ演算子です。引数が可変長配列の場合は、もはやコンパイル時定数は生成されません。 –
あなたのコードはコンパイルされますか?私は '可変サイズのオブジェクトが初期化されないかもしれない'エラー –