質問: 'b'; 両者の違いがいまいちよく分かりません。 コードaでpa[2]のアドレスを確認すると、 paのアドレス[+2]を指しているので問題ないともうのですが、 間違っているのでしょうか? paに対して特別な操作はしていません。 ご教授お願いいたします。
回答: >char* pa = "123456789"; >pa[2] = 'a'; メモリ上のどこかに"123456789"が格納され、その先頭アドレスがpaに格納されます。 メモリ上のどこかに格納されている"123456789"は「文字列定数」となります。 「定数」なので、通常は書き換えは許可されません。 >char pb[] = "123456789"; >pb[2] = 'b'; メモリ上(ローカル変数ならたいていはスタック領域上)に10バイトの領域を確保し、 その領域の初期値として"123456789"を格納しています。 こちらは通常内容が変化するものとして使用されるので、書き換えは可能です。 http://www9.plala.or.jp/sgwr-t/c/sec10-3.html の【文字列リテラル】を参照されるとよいでしょう。 char* pa = "123456789"; char* pb = "123456789"; と記述した場合、指している文字列は同じですからコンパイラの最適化によってはpaとpbが同じアドレスを指す場合があります。 さて、文字列リテラルの書き換えを許可していたとて、*(pa+1) = 'b'が可能だった場合にpbが指す文字列はどうなるでしょう?