const int *p
const int *p=0;//const修饰(*p),说明*p不能被修改,但是p<地址值可以修改>,
//p是一个指向int型的被定义为const的对象的指针,
//微妙在于p本身不是常量,可以重新被赋值,使其指向不同的对象,但不能修改p指向的对象(*p).
//可用const int *p=0;定义的指针,指向const 对象及非const对象
const int *p=0;
const int i_m=12;
int val=333;
p=&i_m;//正确,p可以被修改.但*p=i_m;是错误的.
p=&val;正确
val=444;//正确val不是常量,可以被修改.
*p=555;//错误,不能修改(*p)
int *const p
int *const p;
//p 是指向一个非const 对象的const 指针
//定义读作p 是一个指向int 类型对象的const 指针
//不能赋给p其他的地址值 但可以 修改curErr 指向的值
下面的代码说明我们可以怎样使用p
do_something();
if ( *p) {
errorHandler();
*p = 0; // ok: 重置指针所指的对象
}
试图给const 指针赋值会在编译时刻被标记为错误
p = &i_m; // 错误
指向const 对象的const 指针的定义就是将前面两种定义结合起来
例如
const double pi = 3.14159;
const double *const p= π
在这种情况下 p指向的对象的值以及它的地址本身都不能被改变 我们可以从
右往左将定义读作 pi_ptr 是指向被定义为const 的double 类型对象的const 指针