字符串与字符指针的问题:为什么用数组定义的字符串可以修改,而用指针定义的不能修改?

例如:
char *p="abcde";的时候,字符串是不可以修改的!
而char p[]="abcde";的时候,字符串是可以修改的!
但是我怎么觉得这两种定义方式等价的啊!什么情况??
还有一点就是为什么同一个字符串,用指针定义的时候在常量区,而用数组定义的时候在栈中呢?谁能详细说下数组定义和指针定义时内存分配方面的问题吗?为什么数组定义的可以修改?而指针定义的不能修改??

char *p="abcde";
这种方式是定义了一个字符型指针,指向常量字符串"abcde"

char p[]="abcde";
这种方式是定义了一个字符数组,其长度自动设置其等于"abcde",

所以第一种指向了常量区,无法修改;第二种定义了普通的数组变量,放在栈中,可以修改
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-22
"I love you China, do you love me?"
在存放在.rodata段,该段是只读的,当你强行做修改的时候,当然要报错喽。

而定义为数组的形式之后:就把这个字符串拷贝进数组了,对于数组中的内容,可以随便修改呀. 原来的字符串还是不变的。。。

具体回答,参考我的博客:http://blog.csdn.net/hu1020935219/article/details/12948947
第2个回答  2014-05-07
因为再定义字符指针时默认的在前面有一个const就是无法修改它的值。
相似回答