"asdf"是一个没有名字的常量字符串,由于没有名字,所以必定是常量,编译器通常把这种常量数据存放在一个叫只读的区域中,里面的数据是无法改变的——你考虑一下,假如有两串类似的常量字符串,"asdf"和"mnbv",那么编译器极可能把这两个串并排放在一起,亦即如果你强硬修改"asdf"为"asdf3",那么就意味着篡改后面的数据,这是绝对不允许发生的,也正是编译器把这种数据储存为常量的原因。
你的p只是一个指针,它指向这个字符串的地址,但并不意味着指向了就能修改,比如被指的数据是在ROM的地址上,是改不了的。还是原先的问题,有地址是一回事,有数据又是另一回事,而数据能否被修改更是另一回事。不要滥用指针,这是我反复强调过的。
你可以将"asdf"通过地址把字符逐个抄出来显示,然后在显示的地方后面自己加个字符'3',以造成"asdf3"字符串的假象,但绝对无法把原来的"asdf"数据改掉。没有办法加入,最多重新构造一个新的字符串。将来你学到更高级的语言,就会知道一种叫string字符串是无法修改的概念——任何表面上看起来改过的,都是重新复制出来的,连地址都跟原先不同,这也是它们禁用指针的原因。
[
本帖最后由 TonyDeng 于 2012-12-22 21:27 编辑 ]