修饰变量
//没有区别
const int p = 12; //p不能被修改
p = 42; //编译出错
int const q = 42; //q不能被修改
q = 12; //编译出错
修饰指针
const int a = 12;
const int b = 42;
const int c = 54;
const int *r = &a; //*r不能被修改
*r= b; //编译出错
int* const p = &b; //p不能被修改
p = &c; //编译出错
int const *q = &c; //*q不能被修改
*q = a; //编译出错
理解记忆
对于const我们可以使用“去除类型,就近原则”来理解,即const修饰的是去除类型后最靠近它的右边的那个变量(包含解引用符号*),即: 1、const int p和int const q去除类型后,都是 const var,所以这两者是等效的 2、const int *p和int const *q去除类型后,都是const *var,所以这两者也是等效的,即都是修饰的指针解引用,所以这两种情况是能修改指针变量的值,不能修改解引用本身,即不能对*p和*q进行赋值 3、int* const p,这个const跟变量中间没有类型,所以比较好理解,它修饰的就是p指针变量本身,所以这种情况是不能修改指针变量的值,但能对解引用进行赋值,即*p = var是合法的
|