const 的语法虽然变化多端,但并不是高深莫测。
如果关键字 const出现在星号左边,表示被指之物是常量;
如果出现在星号右边,表示指针自身是常量;
如果出现在星号两边,表示所指物和指针两者都是常量。
#include <iostream>
using namespace std;
int main()
{
int a = 1;
int b = 2;
// non-const pointer,non-const data
int* p1 = &a;
*p1 = 2;
p1 = &b;
// p2为常量指针, non-const pointer,const data
const int* p2 = &a; // int const* p2;的语法也和它一样
//*p2 = 2; // error: p2为指针常量, 不能修改它指向对象的值
p2 = &b;
// p3为指针常量, const pointer, non-const data
int* const p3 = &a;
*p3 = 2;
//p3 = &b; // error: p3为常量指针,不能修改它的指向
// p4为同时为指针常量、常量指针, const pointer, const data
const int* const p4 = &a;
//*p4 = 4; // error: p4指向的对象为 const data
//p4 = &b; // error: p4为 const pointer,不能修改其指向
return 0;
}