位置: IT常识 - 正文

<四>2:掌握Const 与一二级指针结合应用

编辑:rootadmin
C++中 Const修饰的量叫常量,与普通变量的区别是什么? C++中有两点1:编译方式不同,在编译的过程中,所有在程序中出现名字的地方都会被初值替换掉 2:不能作为左值了 const 修饰的量常出现的使用错误有: 1:常量作为左值修改值 (因为这种方式可以直接修改常量的值) 2:把常量的地址泄漏给 ...

推荐整理分享<四>2:掌握Const 与一二级指针结合应用,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

C++中Const修饰的量叫常量,与普通变量的区别是什么?C++中有两点1:编译方式不同,在编译的过程中,所有在程序中出现名字的地方都会被初值替换掉 2:不能作为左值了

const 修饰的量常出现的使用错误有:1:常量作为左值修改值 (因为这种方式可以直接修改常量的值)2:把常量的地址泄漏给一个普通的指针或普通的引用变量 (因为这种方式可以间接修改常量的值如下示例1代码)示例1:const int a=10;int p =&a; //p=20; 编译报错 不能将 const int*(整型常量的地址) 赋值给 int *(普通的int指针)

const 和一级指针结合方式有如下种类C++的语言规范: const修饰的是离他最近的类型

const int *p;p指针指向的内容不能再被修改,但是p可以指向任意的int类型的内存

int const *p;这种方式同上

int * const p;const 修饰的类型是 int *,修饰的表达式是p, 即 p的值(也是地址)不能被修改了,即p不能再指向其他内存地址了,但是p所指向的那个内存的值得内容可以修改 即 *p=200;

cont int * const p;const p 是指 p不能再指向其他内存地址了, const int * 是指 p指向的内容不能在修改了.

示例2:如下const int b=10;const int * p=&b;(OK 编译通过)int *pp=&b (NOT OK, 相当于将 const int * 转为 int *)

int c=10;int *p1=&c; (OK)const int *p2=&c; *(OK 相当于将 int * 转为 const int )int * const p3=&c; (OK)

<四>2:掌握Const 与一二级指针结合应用

int * p=nullptr;int * const p1=nullptr;cout<<typeid(p)<<endl; // 结果是 int *cout<<typeid(p1)<<endl;// 结果是 int ***结论:如果const 右侧没有指针即没有*的话,那const不参与类型, 即 int * const p1, 这个const 不参与类型, p1的类型仍然是 int * 见下面代码所以示例3:int c=10;int * const p3 = &c; (OK, int * 转为 int * const 根据上面的结论 const 不参与类型, 其实还是 int * 转为 int *)

示例4:int x=100;const int *p=&x;int *p1=p; // 错误 相当于 const int * 转为 int * 是不可以的

const和二级指针的结合

const 与二级指针的结合分成以下几种const int ** p根据C++编程规范,const 修饰离他最近的类型, const 修饰的类型是int ,修饰的表达式是 **p , 是指 **p的值不能被修改

int * const * pconst 修饰的类型是 int*, 修饰的表达式是 *p , 指 *p 的值不能被修改, p的值可以修改 **p 的值也可以修改

int ** const p;const 修饰的类型是 int** , 修饰的表达式是p ,指p的值不能被修改, *p的值可以修改,**p的值也可以修改

看以下示例是否能通过编译示例5:int a =10;int *p =&a;const int ** q =&p; (这句话无法通过编译)上面一行代码相当于 int ** 转成 const int **怎么理解呢?如果int a=10;int *p=&a;const int ** q =&p;上面的代码可以编译通过

首先 q 和p指向的是同一块内存地址如果有const int b=200;q =&b;上面这两行代码,b是const int常量, 现在我们将b的地址放入q中,即q=&b,由于*q和p是同一块内存地址,那么我们是不是就把一个常量的地址即b的地址,就暴露给了一个普通指针p呢?这将会造成通过普通指针p很容易修改常量b的值了,所以const int ** q = &p; 是不可以的。那么怎么解决呢?第一种办法:直接把int *p 加上const不就可以了吗?不就限制了p修改常量的值了吗?第二种办法:int a=10;int *p=&aconst int * const *q=&p;我就不允许 *q =&b, 不就堵住了把一个常量的地址放入普通指针的口了吗?

示例6:int a =10;const int *p =&a;int ** q =&p; (这句话无法通过编译)上面一行代码相当于 const int ** 转成 int ** 更加不可以了如何理解?const int *p =&a 相当于一级指针P已经做承诺,我指向的内容是不可变的,通过p,是不允许修改指向值得内容的那么 int ** q =&p ,如果可以通过编译的话,那么我可以 **q 去修改a的值了,那不是让 一级指针的const修饰了个寂寞吗?

同理int **q = int * const *p 可以转吗?

int * const *p const 修饰的类型是int *,修饰的表达式是 *p,是指 p所指向的内容是不允许修改的,如果上面的转换可以,那么 **q 是不是可以轻易修改 最底层的值了呢?打破了上面的 的限制,所以结论是不可以的

int *const *q =int ** 可以转吗?

int * const *q 只是表达了 *q 的值是不能修改了而且,所以可以转

本文链接地址:https://www.jiuchutong.com/zhishi/310895.html 转载请保留说明!

上一篇:织梦采集中用到的一些过滤规则(织梦如何采集文章)

下一篇:python中使用slice函数(python slic)

  • 淘宝学生认证在哪里(淘宝学生认证在哪里?淘宝怎么进行学生认证)

    淘宝学生认证在哪里(淘宝学生认证在哪里?淘宝怎么进行学生认证)

  • 电脑显卡为什么花屏(电脑显卡为什么不转)

    电脑显卡为什么花屏(电脑显卡为什么不转)

  • 微信朋友圈位置如何定位到别的城市(微信朋友圈位置怎么定位到外地)

    微信朋友圈位置如何定位到别的城市(微信朋友圈位置怎么定位到外地)

  • 钉钉可以查看学生是否悬浮窗(钉钉可以查看学生是否玩游戏吗)

    钉钉可以查看学生是否悬浮窗(钉钉可以查看学生是否玩游戏吗)

  • 苹果手机没电后怎么开不了机了(苹果手机没电后闹钟还会响吗)

    苹果手机没电后怎么开不了机了(苹果手机没电后闹钟还会响吗)

  • pckmoo是哪款手机型号(pccmoo是什么手机)

    pckmoo是哪款手机型号(pccmoo是什么手机)

  • 微信教育警告什么意思(微信 警告教育处理)

    微信教育警告什么意思(微信 警告教育处理)

  • macbook主板坏了表现(macbook主板坏了修要多少钱)

    macbook主板坏了表现(macbook主板坏了修要多少钱)

  • 抖音只能用手机号可以注册吗(抖音只能用手机号注册账号吗)

    抖音只能用手机号可以注册吗(抖音只能用手机号注册账号吗)

  • 多媒体软件可分为(多媒体软件可分为哪几个类型)

    多媒体软件可分为(多媒体软件可分为哪几个类型)

  • qq被屏蔽了还能加好友吗(qq被屏蔽了还能发红包吗)

    qq被屏蔽了还能加好友吗(qq被屏蔽了还能发红包吗)

  • 华为悬浮窗怎么打开(华为悬浮窗怎么调整比例)

    华为悬浮窗怎么打开(华为悬浮窗怎么调整比例)

  • 华为m6怎么调节分辨率(华为m6怎么调整屏幕)

    华为m6怎么调节分辨率(华为m6怎么调整屏幕)

  • 手机qq怎么看退出的群(手机qq怎么看退群的人)

    手机qq怎么看退出的群(手机qq怎么看退群的人)

  • 荣耀20青春版采用什么指纹解锁方案(荣耀20青春版20i)

    荣耀20青春版采用什么指纹解锁方案(荣耀20青春版20i)

  • word2010布局在哪里(word页面布局)

    word2010布局在哪里(word页面布局)

  • 联想设置u盘启动(联想设置u盘启动后启动不了)

    联想设置u盘启动(联想设置u盘启动后启动不了)

  • 网盘下载速度慢原因(网盘下载速度慢是什么原因)

    网盘下载速度慢原因(网盘下载速度慢是什么原因)

  • 无法接听电话请留言是什么意思(无法接听电话请留言是挂了吗)

    无法接听电话请留言是什么意思(无法接听电话请留言是挂了吗)

  • 小米cc9支持5g吗(小米cc9能用5g网么)

    小米cc9支持5g吗(小米cc9能用5g网么)

  • stata和spss的区别(spss与stata的区别)

    stata和spss的区别(spss与stata的区别)

  • 安卓系统和ios系统的区别(安卓系统和iOS系统可以互传吗)

    安卓系统和ios系统的区别(安卓系统和iOS系统可以互传吗)

  • 酷狗音乐如何取消自动续费(酷狗音乐如何取消续费功能)

    酷狗音乐如何取消自动续费(酷狗音乐如何取消续费功能)

  • Linux下检查是否安装过某软件包(linux检测)

    Linux下检查是否安装过某软件包(linux检测)

  • npm,nodejs如何升级(nodejs怎么更新版本)

    npm,nodejs如何升级(nodejs怎么更新版本)

  • Vue项目启动后跳转到制定路由页面(vue项目页面跳转)

    Vue项目启动后跳转到制定路由页面(vue项目页面跳转)

  • 库存生产用钢材属于资产吗
  • 兼职人员账务处理
  • 金税盘锁死日期16号几点
  • 纳税收入包含哪些
  • 采购普通发票和专用发票的区别
  • 报税显示税款入账未到账
  • 出口货物进项税怎样处理
  • 资产负债表负债总额怎么看
  • 房屋及建筑物属于什么会计要素
  • 土地增值税税收优惠
  • 没收不还
  • 个人住房契税2021年收费标准
  • 养殖业土地使用税减免
  • 公司制度奖励怎么写
  • 公司注销公告怎么发布
  • 所得税审核费计入什么科目
  • 怎样冲减虚开发票的会计分录
  • 投资项目非股权比例
  • 税收编码名称是什么
  • 纳税申报一般什么时候
  • 劳务建筑公司一年可以赚多少
  • 季度申报财务报表如何更改
  • 存货盘亏应该计什么科目
  • 增值税纳税申报表在哪里打印
  • 审计报告与汇缴报告
  • win11怎么改名
  • 报销差旅费退回余款填什么凭证
  • 微信转账截图可以p图吗
  • 缴纳税款滞纳金计算方式
  • 航天税控服务费
  • 邮件远程控制
  • 在途物资属于什么科目借贷方向
  • element-plus vue
  • 资产负债表中其他流动资产包括哪些科目
  • 交易性金融资产属于流动资产
  • 商品和服务税收分类编码表下载
  • 嵌入式软件开票要求
  • 其他免税销售额怎么算
  • 手工帐月末结转会计分录
  • jvm jmm
  • 计提加计抵减额在财务报表里哪里体现
  • 两免三减半取消了吗
  • 开专用发票可以直接写加工费这个明细吗?
  • 土地增值税纳税申报期限
  • 9个点的税是多少
  • 房租已付未收到发票
  • 建行e信通贴现高不高
  • 税控技术服务费怎么做账
  • 固定资产多少钱算固定资产
  • 产品质量问题扣款账务处理
  • 工地水包水
  • 基建待摊费用如何分摊
  • 以前年度收入少记了怎么做分录
  • 以前年度损益调整结转到本年利润吗
  • 专利申请费用能走工会会费吗
  • 餐饮食材成本高怎么形容
  • sql数据库压缩能提高性能吗
  • sql server数据库恢复
  • win10系统微软
  • vmware安装redhat6.5
  • centos 安装程序
  • linux如何更改默认的运行级别
  • unity出现bug
  • linuxparted命令
  • linux中的shell命令
  • 脚本控制三行三列怎么写
  • Python生成随机数
  • 使用jquery
  • 安卓软件测试
  • 2个月培训
  • arm兼容库安卓x86
  • js访问thymeleaf值
  • Python for Informatics 第11章 正则表达式(一)
  • 控件begininvoke
  • 怎么去税务局领税盘
  • 酒吧要交国税还是省税
  • 苏宁易购的联系电话
  • 中国税收居民申报
  • 电子发票专用章怎么设置
  • 传统媒介和新媒介
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设