常量:“常量”在程序运行时,不会被修改的量。
指针:利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值
当常量遇到指针时他所代表的一些意义非常容易让人混淆
第一种:
pointer to constant(指针常量):
int x = 1, y = 1;
int * const p2 = &x
*p2 = y;
p2 = &y; //false
第二种:
constant pointer(常量指针)
int x = 1,y = 1;
int const* p2 = &x;
*p2 = 2;/*FALSE*/
*p2 = &y;/*okay*/ [Error] assignment of read-only location '* p2'
第三种:
int x = 1,y = 1;
constant int* p = &y;
*p = 10 //false //[Error] assignment of read-only location '* p'
y = 10;//ok
也就是说如果是这种形式的话 p的指向只能通过 他定义时的指向的值来进行改变。
总结:
可以根据const的位置来确定const的功能
若 const 放在 变量p的前面 const修饰p 则说明 p是一个常量 不能被改变但是他的指向可以改变
若 const 放在 变量*p的前面const修饰(*p) 则说明(*p)是一个常量,p的值不能被改变
若 const 放在 变量int *p = &x; const修饰p和(*p) 他的指向只能通过定义时的变量来改变