位置: 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)

  • 小米手机分屏功能在哪里设置(小米手机手机分屏模式)

    小米手机分屏功能在哪里设置(小米手机手机分屏模式)

  • 手机上怎么把多张照片拼成一张(手机上怎么把多个文档合并成一个)

    手机上怎么把多张照片拼成一张(手机上怎么把多个文档合并成一个)

  • 抖音里面的抽卡机会是什么(抖音抽卡2021怎么抽)

    抖音里面的抽卡机会是什么(抖音抽卡2021怎么抽)

  • 苹果xr面部识别总是要低一点怎么办(苹果xr面部识别直接进入桌面)

    苹果xr面部识别总是要低一点怎么办(苹果xr面部识别直接进入桌面)

  • 小米平衡车寿命一般几年(小米平衡车续航时间)

    小米平衡车寿命一般几年(小米平衡车续航时间)

  • 设置了仅聊天能看到对方朋友圈吗(设置了仅聊天能看出吗)

    设置了仅聊天能看到对方朋友圈吗(设置了仅聊天能看出吗)

  • launcher已停止运行是什么意思(launchercust已停止运行)

    launcher已停止运行是什么意思(launchercust已停止运行)

  • 拼多多拒收快递运费谁出(拼多多拒收快递在哪里操作)

    拼多多拒收快递运费谁出(拼多多拒收快递在哪里操作)

  • switch连显示器没反应

    switch连显示器没反应

  • 微微电话显示什么号码(微微电话来电显示)

    微微电话显示什么号码(微微电话来电显示)

  • 环绕屏有什么用(环绕屏手机图片)

    环绕屏有什么用(环绕屏手机图片)

  • iphone负一屏怎么关闭(iphone负一屏怎么设置)

    iphone负一屏怎么关闭(iphone负一屏怎么设置)

  • 怎样设置来电铃声音乐(怎样设置来电铃声时长)

    怎样设置来电铃声音乐(怎样设置来电铃声时长)

  • 手机怎么弄两个微信(手机怎么弄两个屏幕显示)

    手机怎么弄两个微信(手机怎么弄两个屏幕显示)

  • 隔空投送拒绝了还能接受嘛(隔空投送拒绝了一次还能接受吗)

    隔空投送拒绝了还能接受嘛(隔空投送拒绝了一次还能接受吗)

  • 手机qq怎么设置透明皮肤(手机qq怎么设置手机型号)

    手机qq怎么设置透明皮肤(手机qq怎么设置手机型号)

  • 苹果8是什么基带(苹果是什么基金)

    苹果8是什么基带(苹果是什么基金)

  • iphone11厚度对比xr(iphone 11厚度对比)

    iphone11厚度对比xr(iphone 11厚度对比)

  • 陌陌现在不能视频聊天了吗(陌陌不能视频怎么办)

    陌陌现在不能视频聊天了吗(陌陌不能视频怎么办)

  • pbemoo是什么手机型号(pbfmoo是什么手机)

    pbemoo是什么手机型号(pbfmoo是什么手机)

  • 7p和8p屏幕通用吗(7p屏幕和8p屏幕通用吗)

    7p和8p屏幕通用吗(7p屏幕和8p屏幕通用吗)

  • 760k和860k什么区别(860k和770k)

    760k和860k什么区别(860k和770k)

  • 拼多多揽件超时会怎样(拼多多揽件超时是12小时还是24小时)

    拼多多揽件超时会怎样(拼多多揽件超时是12小时还是24小时)

  • 行距28磅怎么设置(行距28.9磅怎么设置)

    行距28磅怎么设置(行距28.9磅怎么设置)

  • win7电脑关机提示“正在更新,请不要关闭电脑”(win7关机提示)

    win7电脑关机提示“正在更新,请不要关闭电脑”(win7关机提示)

  • 小规模纳税人收到专票可以抵扣吗
  • 原材料报废可以退税吗
  • 高企入库补贴要交企业所得税吗
  • 进项税额转出要交企业所得税吗
  • 柴油车尾气处理液会计分录
  • 待处理财产损益借方
  • 营业执照注销对商标有影响吗
  • 股权转让实缴和认缴的区别
  • 开出收据要做财务报表吗
  • 企业对伤残怎么赔偿?
  • 公司的个人所得税是多少
  • 一般纳税人净利润如何计算
  • 利润表中财务费用为负数是什么意思
  • 固定资产与累计折旧有对应关系吗
  • 进出口贸易中押金怎么算
  • 计提工资会计科目怎么写
  • 雇主责任险是否属于财产保险
  • 劳务费做账要交个人所得税吗?
  • 减免税款为什么在借方
  • 有进项没有销项可以零申报吗
  • 税收楔子是什么意思
  • 企业的筹建期间
  • 进料进口
  • win101703怎么看
  • 如何在win7中查找文件
  • 物流公司的财务能学到东西吗
  • 中文字符和英文字符的转换
  • bill是什么软件
  • 取得普通发票与专票区别
  • removed.exe - removed是什么进程 有什么用
  • 电子发票查询真伪
  • 公司给我多交了社保用不用退
  • 个人抬头有什么用
  • 财务报销单据不能用圆珠笔写吗
  • yii gridview
  • vue项目创建流程
  • k8s kubelet
  • 纳税人在工作
  • 专利费用计入研发费用还是管理费用
  • 支付水电费如何做账务处理
  • 帝国cms生成app
  • 发票丢失如何处理入账
  • 残保金滞纳金可以税前扣除吗
  • 外购存货的账务处理
  • sql server2014教程
  • 行政单位基建管理办法
  • 小规模纳税人技术维护费可以抵扣吗
  • 资产处置收益的核算内容
  • 没有收据不开发票
  • 另一种收到企业信息英文
  • 汇兑损益计入
  • 无形资产达到可使用状态前如何入账
  • 跨月普票发票怎么红冲
  • 申请专利的费用怎么入账
  • 异地学校
  • 进货时的运费计入什么
  • 公司向法人借款会计分录
  • 事业单位项目结算审计报告
  • 限定性和非限定性资产
  • 发票项目名称可以自定义吗
  • mysql 备份和恢复
  • win8系统打不开
  • windows自带的应用程序
  • win10 记笔记
  • win10系统更新后
  • winxp网络连接没有无线网络
  • 电脑出现win 7 界面 然后就不动了
  • win10 2020h1
  • Win7系统无法安装SQL2000
  • 在对linux系统中dir
  • 比较两个字符串的值是否相等
  • python编程入门指南
  • js实现@功能
  • JavaScript中getUTCSeconds()方法的使用详解
  • jquery 使用
  • 怎么查询个人所得税申报成功
  • 山西国家税务总局官网
  • 地方税务局受谁领导
  • 20万块手表交多少税
  • 迈凯伦gt1
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设