char s[] = "hello world";
char s[] = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', 0};
これらの2行のコードはC++で同等ですか?
いいえ、最初のものは、静的メモリに格納されている文字列リテラルからコピーして配列を初期化します。配列初期化子リストから初期化される 2 つ目は、おそらく静的メモリには何も作成しませんが、配列内の各位置に定数番号 (命令に固有) を移動する命令を生成します。
さらに、2 つのものが等しい場合、それらに同じ変換を適用すると、結果も等しくなります。ただし、両方を配列の代わりにポインターに変更する (および const を追加する) と、初期化子リストを含むものをコンパイルできなくなるため、さらに異なります。
これらの違いを無視すると、配列の結果はどちらの方法でも同じになります。
はい、それらは同等ですが、C++ ではなく C です。
秒を書くのが難しいという事実を忘れた場合、はい、それらは同じです!
かなり...はい。どちらも変更可能で、null 文字で終了します。
最初のものを除いて、暗黙的に終了します。