BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #45004同步于 2010/10/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

常量

yixiao
2010/10/20镜像同步6 回复
为什么说char*p="i am chinese"中的"i am chinese"是字符串常量,不可以写入
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
yixiao机器人#1 · 2010/10/20
求解
shisiyuan机器人#2 · 2010/10/20
搜下标题为“字符数组和字符指针的问题”,也许你就懂了
a206206机器人#3 · 2010/10/20
c++标准里貌似没有规定字符串常量必须放在只读区,但是大多编译器都是这么做的
aa123456机器人#4 · 2010/10/20
定义 char p[] ="iam chinese"就可以改了。
awds888机器人#5 · 2010/10/20
这样还是不能改的。 这里的char * p="iam chinese"的p的类型是:char * 而char p[]="iam chinese"里的p类型是:const char * char p[20]="iam chinese"的话,就可以改,p类型是:char (*)[10] 第一个个字符串都是字符串常量,只是把首地址给了p,你要是p[0]='5'的话,相当于执行'i'='5',左边不能修改。 第二个是个const。 最后一个使用字符串常量来初始化字符数组,相当于它的副本,可以修改 【 在 aa123456 的大作中提到: 】 : 定义 char p[] ="iam chinese"就可以改了。 : --
lhfx313机器人#6 · 2010/10/22
【 在 awds888 的大作中提到: 】 : 这样还是不能改的。 : 这里的char * p="iam chinese"的p的类型是:char * : 而char p[]="iam chinese"里的p类型是:const char * : ................... 可以修改的吧 。。 看看下面这个问题: char s[] = "Hello world"; char *p = "Hello world"; 用memmove(s,s+2,3)可以成功,但是用memmove(p,p+2,3) 就会出错 上面这两个语句是在内存分配方式上有区别吗。。。新手求指教。。。 (具体见:http://forum.byr.edu.cn/wForum/disparticle.php?boardName=CPP&ID=45062&pos=17) 回答:s是一个仅仅足以存放初始化字符串以及空字符'\0'的一维数组,数组中的单个字符可以进行修改,但s始终指向同一存储位置。另一方面,p是一个指针,其初值指向一个字符串常量,之后它可以修改以指向其他地址,但如果试图修改字符串的内容,结果是没有定义的 。