1.左值和右值
左值必须能被计算和修改。
左值表达式在赋值语句中既可以作为左操作数,也可以作为右操作数;
2.指向常量的指针
const int *p;
它告诉编译器,*p是常量,不能将*p作为左值进行操作。但这里的指针p还是一个变量,它的内容存放常量的地址,所以先声明常量指针再初始化是允许的,指针也是允许 修改的,例如:
int
a=
0
,b=
1
;
const
int
*p;
//
声明常量指针
p
p=&a;
//p
指向
a
p=&b;
//
修改指针
p
让其指向
b
,允许
*p=
2
;
//
不允许
int a=0,b=1;const int *p; //声明常量指针p p=&a; //p指向a
p=&b; //修改指针p让其指向b,允许
*p=2; //不允许
p不能像*p = 2这样赋值,但是可以通过使用"a = x "改变a的值。
const int y = 58;//常量y,
const int *p = &y;//定义指向常量y的指针p;
3.常量指针
x = 5;
int *const p = &x;
因为这个指针本身是常量,编译器要求给它一个初始化值;
不能改变p的指向,但是这个地址里的内容可以使用间接引用运算符“*”改变其值,例如语句“*p = 56”,将上面的x的值改变为56.