char * p="hello";
,那么由于它写在数据段中,我们不能修改p指向的内容,但是我们可以修改指针本身。但我在《C陷阱与缺陷》一书中发现了这个例子。
作者:Andrew Koenig
AT&T贝尔实验室
新泽西州默里山市07974char *p, *q;
p = "xyz";
q = p;
q[1] = ’Y’;
q将指向包含字符串xYz的内存。p也是如此,因为p和q指向相同的内存。
如果我提到的第一个语句是真的,那么它是怎么成立的呢?类似地,我运行了以下代码:
main()
{
char *p="hai friends",*p1;
p1=p;
while(*p!='\0') ++*p++;
printf("%s %s",p,p1);
}
并且得到了输出结果:ibj!gsjfoet
请解释一下在这两种情况下我们是如何修改内容的? 提前致谢。