事实上这个概念谁都有只是三种声明方式非常相似:
Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:
把一个声明从右向左读。
char * const cp; ( * 读成 pointer to ) cp is a const pointer to char,p不可变,*p可以变,即指向的地址不变,内容可变。
const char * p; p is a pointer to const char;*p不可变,p可变,但是还是只能指向常量。
char const * p; 同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。
C++标准规定,const关键字放在类型或变量名之前等价的。
另:指针函数是一个函数,返回的类型是某个指针;函数指针是一个指针,是指向一个函数的指针。
char * const*(*next)()表示的是一个函数指针,这个指针指向一个函数,该函数返回一个指针a,a指向的是指针b,b的类型是const char*。