私の質問はsizeof()
、渡された引数が動的配列可変長配列である場合にどのように正確に動作するかです。
例を考えてみましょう:
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
演算子は、そのオペランドのサイズ (バイト単位) を返します。これは、式または括弧で囲まれた型の名前の場合があります。サイズは、オペランドの型から決定されます。結果は整数です。オペランドの型が可変長配列型の場合、オペランドが評価されます。それ以外の場合、オペランドは評価されず、結果は整数定数になります。
[....オペランドが評価されます....]から理解できることは、渡された引数がsizeof()
動的配列可変長配列でsizeof()
ある場合、 operator としてではなく関数のように動作することです。
私の理解は正しいですか?