char *p 是一个指针,未分配内存,指向一个字符串常量,只读的,其值不可改变。如char *p = "const"等效于 const char *p = "const",改变"const"会导致崩溃;

char p[]是一个数组,已经分配内存,表示一个字符串变量,可读写,其值可改变。如char p[] = "changeable",可用strcpy(p,"AnString")改变字符串内容;

总的来说,指针是不分配内存的,它指向的是系统的只读的内存,而数组是分配内存的,就是将系统的只读的内存里面的值复制到它的内存里面,因此可读写!

 又有:char *p = "abc";是在文字常量区分配了一块内存放"abc",然后在栈上分配一地址给p并指向这块地址,改变常量"abc"自然会崩溃;然而char p[] = "abc",实际上abc分配的地方处于栈区!