分为两类:
1)指向const 对象的指针
2)const指针
const double* cptr;
注意const挨得谁比较近那么谁就是常类型的。此处的double与const挨着,那么就是说明double对象是const的,那么不允许改变这个对象的值。
可以改变指针cptr 的指向,但是不能通过给该他的指向内存中的内容。如*cptr=20;这样做是错误的。
另外,必须把const对象的地址赋给const对象的指针。
const double pi = 3.14;
double* ptr = π // error;
const double* cptr = π // ok;
允许把const对象的地址赋给指向const对象的指针;
double dval = 3.14;
cptr = &dval;// ok:but can't change dval through cptr;
尽管dval不是const对象,但是任何企图通过指针cptr修改其值的行为都是错误的。
const指针:
int errNum=0;
int* const curErr = &errNum;
// curErr is a constant pointer;
读作curErr是指向int型对象的const指针。这就意味着不能把curErr再指向别别的位置。
3.指向const对象的const指针
fg: const double pi=3.1415926;
const double* const pi_ptr = & pi;
两者都不能修改。
最后一个容易犯错的例子: