如果我将值重新分配给c中的字符指针会发生什么

时间:2014-09-14 11:14:10

标签: c pointers

如果我将字符重新分配给 * p ,则会发生更改。

#include<stdio.h>
int main()
{

char* p="hello" ;
printf("%s",p);
*p='a' ;
printf("%s",p);

return 0;

}

* p =&#39; a&#39; 应该用&#39; a&#39替换&#39; h&#39; ; 在字符串中。

* p应该访问并指出由p指向的字符串的基本元素并替换它。

打印语句打印&#34;你好&#34;两次

但它不能解释为什么不?

2 个答案:

答案 0 :(得分:3)

此:

*p='a' ;

是非法的,因为p指向文字字符串。不幸的是,由于历史原因,C允许您将文字字符串的地址存储在非const指针中,而不进行任何强制转换或警告。但实际上,你应该这样做:

const char* p="hello" ;

然后您的编译器将拒绝此程序,因为它无法修改文字字符串。

答案 1 :(得分:0)

char* p="hello" ;

会将hello放在内存的只读部分,并使p指向该内存,使得对此内存的任何写入操作都是非法的。

它没有名称,并且具有静态存储持续时间(意味着它在程序的整个生命周期中存在);和一个名为p的指向char的类型的变量,它使用该未命名的只读数组中第一个字符的位置进行初始化。

所以

*p='a' ;

会导致内存访问冲突。