したがって、これは広く回答されている質問のように思えるかもしれませんが、私は、この 2 つの間で正確に何が違うのかという内部にもっと興味があります。
2 番目の例では、メモリだけでなくメモリへのポインタも作成されるという事実以外に、次の場合にメモリ内で何が起こるかを示します。
char a[5];
char b* = new char[5];
そして、なぜ私がこの質問をしたのか、どうして私はできるのかにもっと直接的に関連しています
const int len = 5;
char* c = new char[len];
だがしかし
const int len = 5;
char d[len]; // Compiler error
編集VC ++でこのコンパイラエラーが発生していることに言及する必要がありました(図を参照してください...)
1>.\input.cpp(138) : error C2057: expected constant expression
1>.\input.cpp(138) : error C2466: cannot allocate an array of constant size 0
1>.\input.cpp(138) : error C2133: 'd' : unknown size
EDIT 2 :私が作業していた正確なコードを投稿する必要がありました。このエラーは、動的に割り当てられた配列の定数の長さが実行時の値で計算されるときに発生します。
と の間をrandom(a,b)
返すと仮定すると、int
a
b
const int len1 = random(1,5);
char a[len1]; // Errors, since the value
// is not known at compile time (thanks to answers)
一方
const int len2 = 5;
char b[len2]; // Compiles just fine