为何数组的内容可以改 而 指针指向的内容不能改?

来源:百度知道 编辑:UC知道 时间:2024/06/23 03:53:04
如下一小段代码:
#include <stdio.h>

int main(void)
{
char qq[] = "abcde";
qq[0] = 'A';//这句没问题
printf("qq=%s\n", qq);

char *pp = "world";
pp[0] = 'X';//这句出现段错误
printf("pp=%s\n", pp);
return 0;
}
我认为 qq 和 pp 都位于栈上, 且它们指向的字符串都处于静态存储区域。
而为什么qq 所指向的内容可以改而 pp所指向的内容不可改呢?
没有我想要的答案!

你应该要知道char *pp = "world";这句话的意思是将pp指向常字符串,
所以你在 pp[0] = 'X'试图修改字符串的内容时会崩溃。

静态区是代码区,不能改的,否则不就相当于在自——杀了。

qq是在堆栈里
而pp是指向的一段静态存储地址,两者的本质都不一样,当然不能相提并论