1. char *p 和 const char *p 的区别
char *p = "abc"; //与char p[]不同
p[0] = 'd'; // 运行错误,试图改变字符串常量
const char *p = "abc";
p[0] = 'd'; //编译错误,p指向内容是const
这种情况下,const char *p = "abc";是一种比较好的编程习惯,明确表示了不可通过p改变其内容。
2. char *p 和 const char *p 的转换
char *可以赋值给const char *,反过来不可以,会导致编译错误
相容性规则:两个操作数都是指向有限定符或无限定符的相容类型的指针,左边指针所指向的类型必须具有右边指针所指向类型的全部限定符。
const char *p;//不能通过p改变其指向内容,const限定了指针的读写权限,并不改变内存单元的读写特性,即p只能读,但可以通过别的方式改变其指向内容
char ch[] = "abc";
const char *cp = ch; //char *赋值给const char *
ch[0] = 'd'; //合法
cout<<cp<<endl; //cp指向内容变成"dbc"