目录
- 1 前言
- 2 变量与指针的储存方式
- 3 const int *var;int *const var;const int *const var;理解与区分
- 4 总结
1 前言
实际开发过程中经常遇到const关键字作用于指针的情况,例如:const int *var;int *const var;const int *const var;总是难以区分指针的哪个部分为Const,本文在于记录解析const与指针的纠葛。
2 变量与指针的储存方式
定义一个int类型变量:int Var_1 = 1u;
经过编译后最终将会在储存器中开辟一段大小为32 bit的内存用于存放标识符和值:
定义一个int类型指针:int *p = &var_1;
基于上述理解:
a则是通过标识符取值1
&a则为取a的地址为0xA000B000
*p则等同于取地址0xA000B000中的值即为1
&p则取到的是0xC000D000
3 const int *var;int *const var;const int *const var;理解与区分
- const int *p:var为const int 类型,当使用p= N;是禁止的;
- int *const p:const var为 int *类型,当使用p = &N;是禁止的;
- const int *const var:const var 为const int 类型,使用p= N;p = &N;操作都是禁止的的;
值得注意的是Const关键字修饰指针时并不会对指针所指向的目标造成限定,也就是说当*p = N;禁止时,N = 2;这样的操作仍然是被允许的,不属于修改了指针的内容,因此这样的语法常被应用于工程以防止指针的异常修改。
4 总结
以上为个人理解以及方法论,如有原理上的不当之处,望指正。