Pourquoi est-ce que je peux changer l'élément au pointeur p
, mais pas au pointeur r
? Je devine que cela doit faire avec les propriétés des pointeurs.Le pointeur sur la chaîne ne réussit pas à changer de caractère
La modification de p[2]
à w
rend Gowdbye. Changer r
bloque le code.
L'adresse de p
est 0x69fee0
.
L'adresse de r
est 0x69fedc
.
Les deux ont les mêmes sorties à la boucle for (à part les données de rebut après la fin du mot 'Goodbye').
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;
}
Il n'y a aucune garantie que le littéral de chaîne sera placé dans la "mémoire morte". Le standard C++ dit simplement que tenter de modifier un littéral de chaîne conduit à un comportement indéfini. –