在各种面试中,常出现这几种形式:const char*p ,char const *p ,char*const p的区别问题,常常很混乱,不清楚,本人一段时间内也很糊涂,找不到好的方法来辨别。在相关资料的帮助下,终于水落石出了!
Bjarne 在他的The C++ Programing Language 给出了一个助记的方法 把一个声明从右往左读。(*读成 point to),总结如下:
const char*p :p is a point to the const char 即 p是一个指向只读量(不能说是常数,const意味着”只读“)的指针。char型数是不可以修改的,但指针是可以的。
char*const p:p is a const point to the char 即p是一个只读指针(常指针),指向char的变量。很显然,指针不可以修改,但char型数可以修改。
char const *p :由于C++中没有const *的运算符,所以*和P结合,const只能和char结合,和第一种(等同于const char*p)是一样性质的指针。
比较清楚了吧!
当然还有一些其他组合形式,比较简单,如:
const char p:p是一个常char型数。
char const p:同上,一个概念,
char const* p const: 这个怎么分析呢?按照上面的方法,p是一个指向常char型的常指针。即 char和指针都不可以修改的。这样划分一下(char const)(* p const)不就清楚了啊!
感谢vinice,他的博客连接打不开,抱歉!
有错误,欢迎大家批评指正!欢迎转载,请标注连接。