const关键字
- const 修饰的变量不能直接被修改
const int a = 10;
a = 20// 不能直接修改
- 可以间接修改
- 通过指针的方式
const int a = 10;
int *p = (int*)&a;
*p = 20;
// 可以修改
- const 修饰变量的意义在哪里?
- 让编译器进行直接修改检查
- 告诉其他程序员这个变量后面不要改,也是一种“自描述”含义。
- 在编译期间保护代码不被修改,给编译器去看的。
int a = 10;
int *p = &a;
// a:int:4byte:4个地址:&a?:最低地址的那个!!
// 在c中任何变量&都是最低地址开始,考虑字节序列来看
- (类型相同的情况下)对指针进行解引用,指针所指向的目标。
const修饰指针
int a = 10;
const int *p = &a;
*p = 100;// p指向的变量不能直接修改
p = 100;
int const *p = &a;
*p = 100;
p = 100;
int *const p = &a;// p的内容不可直接被修改,p指向不能改
*p = 100; // 指向 a 它可以修改
p = 100;
const int * const p = &a;
// p的指向不能改,要一直直指向a
// p的变量不能改
*p = 100;
p = 100;
- 函数返回值进行const修饰,让编译器知道不能修改
- 一般内置类型返回,加const无意义。
const int* val()
{
static int a = 10;
return &a;
}
int main()
{
const int* i = val();
return 0;
}
小总结:
- const 一个是给编译器看,一个是给程序员看,不会进行强约束,修饰变量 指针 数组 函数 函数返回值。
- volatile