char *p="abcde";
这种方式是定义了一个字符型指针,指向常量字符串"abcde"
char p[]="abcde";
这种方式是定义了一个字符数组,其长度自动设置其等于"abcde",
所以第一种指向了常量区,无法修改;第二种定义了普通的数组变量,放在栈中,可以修改
"I love you China, do you love me?"
在存放在.rodata段,该段是只读的,当你强行做修改的时候,当然要报错喽。
而定义为数组的形式之后:就把这个字符串拷贝进数组了,对于数组中的内容,可以随便修改呀. 原来的字符串还是不变的。。。
具体回答,参考我的博客:http://blog.csdn.net/hu1020935219/article/details/12948947
因为再定义字符指针时默认的在前面有一个const就是无法修改它的值。