const与一级指针二级指针结合
来源:互联网 发布:windows文件夹监控 编辑:程序博客网 时间:2024/06/11 02:36
const关键字在C和C++里修饰变量时,是不同的,在C++里const修饰的量是常量,
而在C里const修饰的量是常变量。关于const在C和C++里的不同我有时间再整理成另外一篇。
一、首先来确定一下到底const修饰的是谁。一句话,类型就近原则。
const int p; 此时离const最近的类型是int类型,所以const修饰的是 p,所以p不能被改变;
const int * p; 此时离const最近的类型还是int类型,所以const修饰的是 * p,所以 * p不能被改变,p可以被改变;
int * const p ; 此时离const最近的类型是int*类型,所以const修饰的是 p,所以p不能被改变;;
在C++里const修饰的是常量,那么就有以下2条重要的参考规则:
**1、常量不能当作左值;
2、不允许有指针或引用可以间接改变该常量的值。**
这两条规则是我们的重要参考依据。
******const与一级指针结合:
int a=10;
const int *p = &a;此时const修饰 *p,
*p = 20;//错误,不符合规则1.(常量不能当作左值;)
int*q = p;//错误,不符合规则2(不允许有指针或引用可以间接改变该常量的值。因为此时我们可以对q解引用,来改变*p)
const与二级指针结合:参考https://wenku.baidu.com/view/bbe7e708a300a6c30c229fa1.html
const int **p ,
int **const p,
int const *p的区别 参照第一点,你能够很快区分const int **p , int **const p的区别。 const int **p 表示**p代表的整形内存放的是常量,不能被修改,而指针p本身可以被任意修改赋值。 int **const p 表示**p代表的整形内存放的是变量,可以被任意修改,而指针p本身是不能被修改的 int *const *p是什么意思呢? 由于int const p是一个二级指针,那么const现在修饰的是int,代表*p的值是不能被修改的,通俗的说,也就是二级指针p所指向的一级指针*p是不能被修改的,而**p所代表的整形内存可以被任意修改,指针p本身也可以被任意修改! 对于二级指针综合const有一个重要的问题,如下,请看示例代码:
int a=10;
int *p=&a;
const int q=&p;//error! “初始化”: 无法从“int ”转换为“const int ” 也类似于这样的代码: int *p; const int **q=p; //error! “初始化”: 无法从“int ”转换为“const int *”
可以看出,c++不让我们把int**转换为const int**,这样不好吗?我们不是把类型的安全属性提高了吗?为什么反到禁止这样的类型转换呢? 当然c++这样做是出于安全考虑的,以防止我们修改常量对象。为了展现如何会修改常量对象,在这里我们做个假设,假设c++允许我们代码“const int **q=&p”的执
行,也就是允许我们把int**转换为const int**,请看实例:
int a=10;
int *p=&a;
const int **q=&p;//假设这一行代码c++允许执行
const int b=20;
const int *pb=&b;
* q=pb;//重点在这里,由于* q(* q就是指针p)是变量,pb指针也是变量,因此把pb赋值给* q,也就等于执行了p=pb,由于pb指向的是常量b,因此指针p也指向了常量b,但是看看p的定义 int * p, 没有任何const修饰,你可以通过* p修改内存的值,但是p代表的常量b,是不能被修改的,你试图通过非常量指针p去修改常对象是错误的!编译器不会答应这样的事情!通过上面例子,你应该知道c++为什么不允许我们把int*转换为const int**,因为这样会有让一个普通指针指向常对象的危险。
- const与一级指针二级指针结合
- 一级指针与二级指针
- 一级指针与二级指针
- const 和一级指针、二级指针、引用的结合使用总结
- 浅谈一级指针与二级指针
- 内存申请与一级二级指针
- 内存申请与一级二级指针
- 内存申请与一级二级指针
- 内存申请与一级二级指针
- 一级指针和二级指针
- 一级指针和二级指针
- 一级指针二级指针详解
- 一级指针以及二级指针
- C--struct中一级指针与二级指针练习
- 二级指针与一级指针的一些区别
- C语言之一级指针与二级指针剖析
- 一级指针与二级指针的使用,以及使用二级指针的场合
- C++ 中的二级指针 和 一级指针
- 新手建站免费空间及其使用体验
- HDU 5673 Robot
- Mono Dev 默认consoles字体,中午字体注释乱码
- AHandler and AMessages
- JAVA基础准备要点---(JAVA初始化顺序)
- const与一级指针二级指针结合
- Android自定义控件8----直接绘制也可完成滑动
- caffe之Data_Layer层代码解析
- [Oracle 11g r2(11.2.0.4.0)]Oracle Golden Gate Training-workshop6
- 查看ORACLE 数据库及表信息
- nodejs之require方法
- chartJS+ajax+ssm简单整合
- 存储设备管理大全,你值得拥有
- 数据库SQL优化大总结之 百万级数据库优化方案