ポインタp
では要素を変更できますが、ポインタr
では要素を変更できないのはなぜですか?私はそれがポインターのプロパティで行う必要があります推測しています。文字列へのポインタが文字の変更に失敗する
p[2]
からw
に変更するとGowdbyeになります。 r
を変更すると、コードがクラッシュします。
p
のアドレスは0x69fee0
です。
r
のアドレスは0x69fedc
です。
両方とも、 'Goodbye'という単語が終わった後のガベージデータ以外に、forループで同じ出力を持ちます。
int main()
{
char q[]="Goodbye";
char* p = q;
char* r = "Goodbye";
cout<<"Address of p: "<<&p<<endl;
cout<<"Address of r: "<<&r<<endl;
for(int i = 0; i<10; i++)
{
cout<<"P["<<i<<"]: "<<p[i]<<endl;
cout<<"R["<<i<<"]: "<<r[i]<<endl;
}
p[2]='w';
cout<<p<<endl;
r[2]='w';
cout<<r<<endl;
return 0;
}
文字列リテラルは、「読み取り専用メモリ」に置かれる保証はありません。 C++標準では、文字列リテラルを変更しようとすると、定義されていない動作が発生することがわかります。 –