const char*, char const*, char*const的区别
const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。
事实上这个概念谁都有,只是三种声明方式非常相似很容易记混。
Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:
把一个声明从右向左读。
char * const p; ( * 读成 pointer to )
p is a const pointer to char
const char * p;
p is a pointer to const char;
char const * p;
同上因为C++里面没有const*的运算符,所以const只能修饰属于前面的类型char,因此char const * p等价于const char *p。
C++标准规定,const关键字放在类型或变量名之前等价的。
const char *p; 常量指针,指向一块区域,这块区域不可写,只能读。
char * const p; 指针常量,指向一块区域,这块区域可读可写,但是指针的值初始后就不能改,类似于一般常量。
在作参数传递时,应当是将一个常量传递给一个const char* p, 若所传递的不是常量,那么需要特别注意,所传递变量必须有自己的独立地址空间。