C++では文字列リテラルに関する疑問がほとんどありません。文字列リテラル
char *strPtr ="Hello" ;
char strArray[] ="Hello";
ここで、strPtrとstrArrayは文字列リテラルと見なされます。
文字列リテラルは読み込み専用メモリに保存されているため、値を変更することはできません。
私たちはどちらも上記の文は違法でなければなりません
strPtr[2] ='a';
and strArray[2]='a';
を行うことはできません。 コンパイラはどちらの場合もエラーをスローする必要があります。
コンパイラは文字列リテラルを読み取り専用メモリに保持します。したがって、コンパイラは文字列リテラルを変更しようとするとエラーをスローします。
また、constデータも読み取り専用とみなされます。
文字列リテラルとconstデータの両方が同じように扱われますか? 文字列リテラルからconst_castを使用して定数を削除すると、値を変更できますか?
文字列リテラルは正確にどこに格納されますか? (プログラムのデータセクション)
"strPtrの宣言された型は"です、strArrayを意味しますか? – 4pie0