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

  • 刀塔霸业ios国区无法下载(刀塔霸业ios)(刀塔霸业安卓怎么玩)

    刀塔霸业ios国区无法下载(刀塔霸业ios)(刀塔霸业安卓怎么玩)

  • 苹果11可以设置两个面容吗(苹果11可以设置动态壁纸吗)

    苹果11可以设置两个面容吗(苹果11可以设置动态壁纸吗)

  • 安卓如何打出苹果表情(安卓如何打出苹果符号)

    安卓如何打出苹果表情(安卓如何打出苹果符号)

  • etc设备一直滴滴滴滴(etc设备一直滴滴响闪红灯怎么解决)

    etc设备一直滴滴滴滴(etc设备一直滴滴响闪红灯怎么解决)

  • 微信上怎么拼车回家过年(微信上怎么拼车预定)

    微信上怎么拼车回家过年(微信上怎么拼车预定)

  • 海报分辨率一般多大(海报分辨率一般要大于多少)

    海报分辨率一般多大(海报分辨率一般要大于多少)

  • erp系统规划包括哪些环节(erp系统计划)

    erp系统规划包括哪些环节(erp系统计划)

  • ipad用不了安卓的热点(ipad用不了安卓充电器)

    ipad用不了安卓的热点(ipad用不了安卓充电器)

  • e5 2660相当于什么cpu(e52660相当于什么)

    e5 2660相当于什么cpu(e52660相当于什么)

  • 小米10的屏幕是三星的么(小米10的屏幕是三星的吗)

    小米10的屏幕是三星的么(小米10的屏幕是三星的吗)

  • c#语言和c语言的区别(c#与c语言的本质区别)

    c#语言和c语言的区别(c#与c语言的本质区别)

  • 发送位置和共享实时位置的区别是什么(发送位置和共享实时位置好处)

    发送位置和共享实时位置的区别是什么(发送位置和共享实时位置好处)

  • 手机怎么共享屏幕到电视(手机怎么共享屏幕给电视)

    手机怎么共享屏幕到电视(手机怎么共享屏幕给电视)

  • word更改所有英文字体(如何改word中所有的英文)

    word更改所有英文字体(如何改word中所有的英文)

  • 猜你喜欢直播怎么关闭(播放猜你喜欢)

    猜你喜欢直播怎么关闭(播放猜你喜欢)

  • 滴滴永久封禁怎么解封(滴滴永久封禁还能不能重新注册了?)

    滴滴永久封禁怎么解封(滴滴永久封禁还能不能重新注册了?)

  • 微博怎么注销手机号(微博如何注销账号手机)

    微博怎么注销手机号(微博如何注销账号手机)

  • pr视频过渡效果怎么加(PR视频过渡效果)

    pr视频过渡效果怎么加(PR视频过渡效果)

  • 拼多多免拼卡在哪里(拼多多免拼卡在哪里领取)

    拼多多免拼卡在哪里(拼多多免拼卡在哪里领取)

  • 苹果11特点(苹果11特点软件)

    苹果11特点(苹果11特点软件)

  • live怎么延长时间(live的时长怎么控制)

    live怎么延长时间(live的时长怎么控制)

  • 华为锁屏时间位置调整(华为锁屏时间位置设置方法)

    华为锁屏时间位置调整(华为锁屏时间位置设置方法)

  • 华为已删除文件夹在哪里(华为删除文件怎么找回)

    华为已删除文件夹在哪里(华为删除文件怎么找回)

  • 8p基带是高通的吗(苹果8p高通基带信号怎么样)

    8p基带是高通的吗(苹果8p高通基带信号怎么样)

  • 小米运动如何上传数据(小米运动设置具体步骤)

    小米运动如何上传数据(小米运动设置具体步骤)

  • 重置组策略(重置组策略命令)

    重置组策略(重置组策略命令)

  • mapbox样式规范(style)(mapbox怎么用)

    mapbox样式规范(style)(mapbox怎么用)

  • 水资源费如何入账
  • 房产证,契税
  • 增值税报表申报流程
  • 企业所得税发票税前扣除异常
  • 所得税季报季初从业人数
  • 发票专用章盖在收据上有法律效益
  • 如何开小加工厂
  • 财政拨款收入年底结转到本期盈余
  • 处置子公司全部股权会计处理 企业会计准则
  • 同一控制下企业合并和非同一控制下企业合并的区别
  • 普通发票验旧后当月能作废吗
  • 机器设备折旧费用属于间接生产费用
  • 预期收益率计算器
  • 车辆购置税过户流程
  • 主营业务成本的贷方可以是哪些科目
  • 电梯增值税率是多少
  • 去年的税还能退吗
  • 增值税普票销售方无开户行账号是否可以
  • 外地出差的餐费住宿费是不是都计入差旅费
  • 公司招聘费属于什么科目
  • 资产减值损失需要结转吗
  • 一般企业利润表格式
  • 上月留抵进项抵扣分录
  • 以前年度的库存商品出现负数今年如何入账
  • window10最新激活码
  • 影响资金等值的三个因素
  • 股东投资追加款怎么做账
  • 无形资产增值税计入入账价值吗
  • 什么时候不能计入开办费
  • PHP:mb_encoding_aliases()的用法_mbstring函数
  • 差额征税通俗理解
  • 债券利息收入属于什么会计科目
  • php语言设计模式之单例模式
  • 期间费用转入本年利润
  • 原始凭证容易出现错误的原因
  • 借方为什么是减少额?
  • 收益类账户借增贷减
  • yolov8训练自己的数据
  • 机票的退票费可以开具发票吗
  • mobilenet模型
  • 捐赠利得计入营业外收入吗?
  • 非营利组织能否开社保账户
  • 酒店收取电费合理吗
  • C语言中次方怎么表示
  • phpcms验证码不显示
  • mongodb配置文件详解
  • 怎么把其他应收款借方余额转出
  • 社保怎么缴费方式
  • 预收账款可以用吗
  • 已计提的城建税有误,怎么办
  • 代扣代缴境外增值税怎么申报
  • 三个月 租房
  • 个人所得税如何计算
  • 主营业务成本里的工资
  • 支付金额与实付金额不一致
  • 会计做账的凭据是什么
  • 三年期定期存款利率怎么算
  • 如何做好工程后期维保
  • 如何理解什么是半殖民地半封建社会
  • 不得从销项税额中抵扣的进项税额,不得计提加计抵减额
  • 手机属于固定资产吗
  • 抵扣联和发票联的区别
  • mysql如何修改数据库名
  • 怎样修改注册表关闭win11系统杀毒软件
  • centos 安装chia
  • 苹果mac安装字体怎么安装
  • 快速锁定单元格的方法
  • c#在unity的作用
  • cocos2d官网
  • linux rpm包怎么安装
  • opengl实现光线追踪
  • unity flybird
  • nodejs跳转到指定页面
  • unity音乐thefatrat
  • node-js
  • python定义全局
  • 国家税务总局广东省税务局待遇
  • 怀化市税务局领导
  • 消费税是单一环节征税吗
  • 所得税与增值税区别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设