一、const 需要怎么理解??
const修饰的变量不能够再作为左值,初始化完成之后,值不能被修改
1.1 C语言的const
const 修饰的量,可以不用初始化,不叫常量,叫做常变量。
void main()
{
const int a = 20;
int *p = (int*) &a;
*p = 30;
// 30 30 30
printf("%d %d %d\n", a, *p, *(&a));
return 0;
}
1.2 C++语言的const
必须初始化,叫做常量,如果初始值不是一个立即数,叫做常变量,是一个变量。
1.3 C和C++中const的区别是什么??
const的编译方式不同,在C中,const就是当做一个变量来编译生成指令的,C++中所有出现const常量的名字的地址,都被常量的初始化替换了。
二、const 和一级指针的结合 && const和二级指针的结合
2.1 const 修饰的量叫做常量,普通变量的区别是什么??
C++中有两点区别:1.编译方式不同 2. 不能作为左值了,
2.2 const 修饰的量尝出现的错误是:
- 常量不能再作为左值,直接修改常量的值
- 不能把常量的地址泄露给一个普通的指针或者普通的引用变量 可以借鉴修改常量的值
2.3 const 和一级指针的结合
C++的语言规范:const 修饰的是离他最近的类型
总结const和指针的类型转换公式:
这里需要注意一下:const 如果右边没有指针* 的话,const 是不参与类型的。测试代码如下:
int *q1 = nullptr; int *const q2 = nullptr; cout << typeid(q1).name() << endl; cout << typeid(q2).name() << endl; /// 答案: int * int *
2.4 const 和二级指针的结合
永远只有一级指针,剩下的就是指针的类型.