#include <iostream.h>
void main()
{
?int var1 = 10, var2 = 20;
?int * p1;
?const int * p2;//意思是他所指向的*p2是一个常量,我们无法通过p2来修改它所指向的对象
?????//说白了就是*p2 = newData;错误
?int const * p3;//注意这种定义形式和const int * p2效果一样的。
?
?int * const p4 = &var1;//注意这里定义的是常量指针,意味着必须初始化,并且以后不能够修改指针再去指向其他变量,但是他所指向的指可以修改
?
?const int * const p5 = &var1;?//不用说了阿我们只能够用他们而不能够修改任何东西,也就是只读
?int const * const p6 = &var1;?//同上
?//验证:意思是他所指向的*p2是一个常量,我们无法通过p2来修改它所指向的对象
?//初始化
?p2 = &var1;
?p3 = p2;
?
?cout << "{var1=" << var1 << "}{*p2=" << *p2 << "}"
??<< "{*p3=" << *p3 << "}" << endl;
?cout << "期望修改var1=" << var1 << "的内容"<< endl;
?var1++;
?cout << "var1++,var1=" << var1 << "自加后" << endl;
?cout << "期望修改*p2=" << *p2 << "的内容,通过(*p2)++"<< endl;
?//(*p2)++;//error
?cout << "(*p2)++;l-value specifies const object,也就是说(*p2)为常量不可修改,注意上面我们修改了var1" << endl;
?
?//证明:注意这里定义的是常量指针,意味着必须初始化,并且以后不能够修改指针再去指向其他变量,但是他所指向的指可以修改
?cout << "int * const p4 = &var1\n(*p4)++,";
?(*p4)++;
?cout << (*p4);//可以修改
?//p4 = &var2;//error:l-value specifies const object,p4是常量
?//对于p5和p6应该不难理解了吧
?//补充下,如果你通过变量的两个属性入手一样可以解答问题,
?//就是变量的类型和变量的内容数值
?//const int * p1,p1内容数值是一个整形变量的地址;
?//类型是const int * 也就是它是int *,并且他经过*运算后的东西是常量
// int *const p3,p3内容数值是一个整形变量的地址;因为const离类型近
?//类型是int * const 也就是它是int *,并且他的内容是const,因为const离变量近
}