写在前面的总结:
常量指针(pointer to const):指针指向的对象是常量,可以指向变量和常量,不能通过指针改变指向对象的值,
但是可以从一个对象指向另外一个对象(指针可变)。
指针常量(const pointer):指针是一个常量,引用的定义即为指针常量,指针常量一旦指向一个对象之后就不能再指向别的对象(同引用,指针不能变),但是可以通过指针改变指向对象的值。
const int p; // p 为常量,初始化后不可更改
const int* p; // 常量指针,*p 为常量,不能通过*p改变它指向的内容
int const* p; // 常量指针,*p 为常量,同上
int* const p; //指针常量, p 为常量,初始化后不能再指向其它内容,等用与引用,引用即指针常量
//********常量指针*********//
const int a = 2;
int b = 3;
const int* p = &a;//常量指针,指向常量
std::cerr << "*p " << *p << std::endl;
p = &b;//可以指向另外一个对象,此处为变量
std::cerr << "*p " << *p << std::endl;
//(*p)++;//错误,不能通过*p改变指向对象的值
b = 6;
std::cerr << "b " << b << std::endl;
//********引用*********//
int d = 5;
int& e = d;//引用
e++;
std::cerr << "e " << e << std::endl;
std::cerr << "d " << d << std::endl;
//********指针常量*********//
int c = 4;
int* const q = &c;//指针常量
//q = &d;错误,和引用一样,一旦初始化完成,就不能再改变q指向的对象
(*q)++;
std::cerr << "*q " << *q << std::endl;
std::cerr << "c " << c << std::endl;
结果: