求高手解释c语言问题: char *p="china";char a[]="china";区别 a[0]=‘d’; *(p+0)=✀d✀;对还是不对

2025-04-08 21:12:48
推荐回答(3个)
回答1:

a[0] = 'd'; //正确,因为a实在堆栈上,china被赋值给数组a,程序可以操作这部分内存,所以可以修改整个
*(p+0) = 'd'; //错误,字符串"china"是const型的数据,p指针指向这个字符串,不能通过这种方式修改,会导致程序崩溃

====
好心回答问题,还被你BS,哎,蛋疼的紧!

回答2:

char *p="china";char a[]="china";区别
char *p="china";相当于下面两条语句
char *p;
p="china";
p为指向存放该字符串(相当于一个字符数组)单元的首地址。和char a[]="china";一样,a也是指向该字符数组的首地址
其实两者没什么区别。
a[0]=‘d’; *(p+0)='d';
这两句没问题,其实一样,都是用字符数组的首地址+偏移量
a[0]=‘d’;为这个数组的第一个元素
*(p+0)='d';这个也一样

回答3:

char *p="china"; p指向的是一个常量,只读,不能被赋值
char a[]="china";a是一个数组

a[0]=‘d’; 正确
*(p+0)='d';错误