1
char s[] = "hello world";
char s[] = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', 0};

これらの2行のコードはC++で同等ですか?

4

4 に答える 4

5

いいえ、最初のものは、静的メモリに格納されている文字列リテラルからコピーして配列を初期化します。配列初期化子リストから初期化される 2 つ目は、おそらく静的メモリには何も作成しませんが、配列内の各位置に定数番号 (命令に固有) を移動する命令を生成します。

さらに、2 つのものが等しい場合、それらに同じ変換を適用すると、結果も等しくなります。ただし、両方を配列の代わりにポインターに変更する (および const を追加する) と、初期化子リストを含むものをコンパイルできなくなるため、さらに異なります。

これらの違いを無視すると、配列の結果はどちらの方法でも同じになります。

于 2012-11-06T23:53:21.917 に答える
3

はい、それらは同等ですが、C++ ではなく C です。

于 2012-11-06T23:43:09.730 に答える
2

秒を書くのが難しいという事実を忘れた場合、はい、それらは同じです!

于 2012-11-06T23:43:32.710 に答える
1

かなり...はい。どちらも変更可能で、null 文字で終了します。

最初のものを除いて、暗黙的に終了します。

于 2012-11-06T23:43:07.340 に答える