字符串跟字符数组的区别

字符串和字符数组的区别
一个小程序:逆序输出字符串,例如输入“china”,输出anihc。问题是main函数中为char p[] = "china";时正常运行,若改成char *p = "china";则崩溃。请教为什么????

#include <stdio.h>
#include <string.h>

void reverse(char *s, int len)
{
char ch;
if (len > 1) {
ch = *s;
*s = *(s+len-1);
*(s+len-1) =ch;
reverse(s+1, len-2);
}
}
int main()
{
char *p = "china";
int len = strlen(p);
reverse(p, len);
printf("%s", p);

return 0;
}


------解决思路----------------------
 C 语言中凡是双引号引起来的字符串直接赋值给指针或作为参数,编译器将其视为:
const char *p ="china" ,这个通不过;char *p ='c',这个就可以。
------解决思路----------------------
char *p = "china" 中的字符串是分配在了常量区,然后让指针指向他,你修改他的值就出错了
而字符数组则是你在栈上分配的,所以可以修改
------解决思路----------------------
回楼主"china" 字符串常量是不能修改的 

另外
引用:
 C 语言中凡是双引号引起来的字符串直接赋值给指针或作为参数,编译器将其视为:
const char *p ="china" ,这个通不过;char *p ='c',这个就可以。

C语言的 "china" 没有const的 
所以 char* p = "china" 没什么问题 
倒是你后面是char *p ='c' 你是怎么想的 p是char* 'c'是int 可以????


------解决思路----------------------
字符串常量的值是不能修改的。