想要弄清楚这个事情,首先关键要明白:
const 属于修饰符 ,关键是看const 修饰的位置在那里
1.常量指针
所谓的常量指针,就是常量修饰符Const在最前面:如Const int *a 或 Int Const *a
这里const 修饰的是int,而int定义的是一个整值
因此a 所指向的对象 值 不能通过 a 来修改,但是 可以重新给 a 来赋值,使其指向不同的对象
eg:
const int *a ;
const int b = 1;
int c = 1;
a = &b //ok 额外:注意不能通过a 来修改 b值
a = &c //ok 额外:虽然c本身不是一个常量
*a = 2 //error 为题就在这里,不能修改通过 a 所指向的对象值,最后赋值得对象是c**,因此不能通过a 来修改c值。
2.指针常量
所谓的指针常量,就是指针在最前面 如:Int * const a
这里const修饰的是 a ,a代表的是一个指针地址
因此不能赋给a其他的地址值,但可以修改a指向的值
这有点和cont int *a相反的意味,例子就不说了
eg:
Int * const a ;
const int b = 1;
int c = 1;
a = &b //OK 第一次定义,指针可以指向任意变量
a = &c //error a指针已经指向b变量,所以不能在指向其他
*a = 2 //OK 这个的意思是 通过指针a来修改b变量的值,所以b变量从之前的1 变成 2