返回信息流为什么说char*p="i am chinese"中的"i am chinese"是字符串常量,不可以写入
这是一条镜像帖。来源:北邮人论坛 / cpp / #45004同步于 2010/10/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
常量
yixiao
2010/10/20镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
这样还是不能改的。
这里的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"就可以改了。
: --
【 在 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是一个指针,其初值指向一个字符串常量,之后它可以修改以指向其他地址,但如果试图修改字符串的内容,结果是没有定义的 。