char greeting[] = "Hello"; char* p = greeting; //non-const pointer, non-const data const char* p = greeting; //non-const pointer, const data char* const p = greeting; //const pointer, non-const data const char* const p = greeting; //const pointer, const data //const 虽然变化多端,但并不高深莫测。 //如果关键字const出现在星号的左边,表示被指物是常量; //如果关键字const出现在星号的右边,表示指针自身是常量; //如果出现在星号两边,表示被指物和指针两者都是常量。 //Effective C++
#include <iostream> int main() { int a = 3; int b; //定义的const的指针(指针指向的内容不能被修改,但指针的地址可以改变) const int* p1; int const* p2; //定义const指针(由于指针本身的地址不能被修改,也就是指针指向的地址是固定的,所以必须声明的同时初始化,指针所指向地址的值是可以改变的) int* const p3 = &a; //指针本身的地址和它指向的内容都是不能被修改,所以声明的同时初始化 const int* const p4 = &a; int const* const p5 = &b; p1 = p2 = &a; //正确 *p1 = *p2 = 8; //不正确(指针指向的内容不能被修改) *p3 = 5; //正确 p3 = p1; //不正确(指针本身的地址不能被修改) p4 = p5; //不正确(指针本身的地址和它指向的内容都是不能被修改) *p4 = *p5; //不正确(指针本身的地址和它指向的内容都是不能被修改) return 0; }