2

初期化したい配列があります

char arr[sizeof(int)];

この式はコンパイル時の定数に評価されるか、それとも関数呼び出しになりますか?

4

5 に答える 5

4
char arr[sizeof(int)];

言語に関する限り、それは問題ありませんが、配列は宣言 (および定義) されるだけで、ローカル変数の場合は初期化されません。名前空間レベルで宣言されている場合、静的にゼロ初期化されます。

sizeof(int)型の定数式であることに注意してくださいsize_t。その値はコンパイル時に認識されます。

于 2013-08-08T15:12:56.753 に答える
0

ここでは初期化はありません。要素を含む配列を宣言または定義することに問題はありsizeof(int)ませんが、コードの読者には少し奇妙に見えるかもしれません。しかし、それが必要な場合は、それを書く必要があります。

于 2013-08-08T15:12:22.893 に答える
0

これは初期化です:

  char arr[sizeof(int)] = { 'A', 'B', '0', 'F' };

もちろん、これsizeof(int)は (少なくとも) 4 であると想定しています。そうしないと、コンパイルに失敗します。

実際の(新しい)質問に答えるには:

sizeof()コンパイル時の演算子です。C++ では [標準によれば、一部のコンパイラは C スタイルの可変長配列を許可しています]、コンパイル時定数以外の結果は得られません。C では、可変長配列を使用すると、単純な計算になります (要素数 * 各要素のサイズ - 要素数は変数部分)。

于 2013-08-08T15:14:22.143 に答える
0

それは、配列をどのように使用するかによって大きく異なります。

sizeof(int)実装によって異なる場合があるため、配列内の要素へのアクセス方法に注意する必要があります。C++ 標準で指定された最小サイズ内でない限り、自分のマシンでアクセスできる要素が別のマシンでもアクセスできると仮定しないでください。

于 2013-08-08T15:17:24.080 に答える