#include<stdio>
const修饰的数据类型是指常类型,常类型的变量的值是不能更改的;也就是只读变量。
A、数据类型对于const是透明的。
int const a = 100;
const int b = 100;
上边的两个式子是等价的。
B、const用于封锁直接修饰的内容将该内容变为只读。
(1)const修饰*cp1,所以*cp1不能再作为左值,变为只读变量
const int *cp1 = &a;
cp1 = &b; //正确
*cp1 = 200; //error
可以修改指针指向的位置,但不能修改指针一开始指向位置内保存的值。
(2)const修饰cp1,所以cp1不能再作为左值,变为只读变量
const int *cp1 = &a;
cp1 = &b; //error
*cp1 = 200; //正确
不可以修改指针指向的位置,但可以修改指针指向位置内保存的值
(3)const修饰cp1,然后const修饰*const cp1
int const *const cp1 = &a;
cp1 = &b; //error
*cp1 = 200; //error
不可以修改指针指向的位置,也不可以修改指针指向位置内保存的值
C、权限只能同等传递或者缩小传递,不能放大
int a = 100;
int b = 200;
const int ca = 10;
const int cb = 20;
int *p = &a;
const int *cp = &a;
int *const cp1 = &a;
int *const cp2 = &ca;\\error
const int *const cp3 = &a;
const int *const cp4 = &ca;
int *const cp2 = &ca;
这个式子就是很明显的给了别人超出自己的权限;