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

  • kmc是什么(KMC是什么品牌)

    kmc是什么(KMC是什么品牌)

  • 华为p30怎么设置不休眠(华为p30怎么设置时间和日期)

    华为p30怎么设置不休眠(华为p30怎么设置时间和日期)

  • 快手注销账号第一条不通过怎么办(如果快手注销账号后账号会变吗)

    快手注销账号第一条不通过怎么办(如果快手注销账号后账号会变吗)

  • oppo有简易模式吗(oppo简易模式适合老年人)

    oppo有简易模式吗(oppo简易模式适合老年人)

  • 华为荣耀10有nfc功能吗(华为荣耀10有没有红外线遥控功能)

    华为荣耀10有nfc功能吗(华为荣耀10有没有红外线遥控功能)

  • 苹果x的返回键在哪里(苹果x的返回键在屏幕哪里)

    苹果x的返回键在哪里(苹果x的返回键在屏幕哪里)

  • 下载的音乐怎么变成本地音乐(下载的音乐怎么改成mp3格式)

    下载的音乐怎么变成本地音乐(下载的音乐怎么改成mp3格式)

  • 怎么让安卓变苹果系统(有什么办法让安卓手机变苹果)

    怎么让安卓变苹果系统(有什么办法让安卓手机变苹果)

  • 手机字体颜色怎么变成黑色(手机字体颜色怎么调)

    手机字体颜色怎么变成黑色(手机字体颜色怎么调)

  • 爱奇艺会员怎样给别人(爱奇艺会员怎样登录两个手机)

    爱奇艺会员怎样给别人(爱奇艺会员怎样登录两个手机)

  • 苹果ipad2是几寸的(苹果ipad2是多少英寸)

    苹果ipad2是几寸的(苹果ipad2是多少英寸)

  • 苹果11配套的耳机是不是无线的(苹果11配套耳机是几代)

    苹果11配套的耳机是不是无线的(苹果11配套耳机是几代)

  • 日产汽车智联怎么使用(日产汽车智联怎么升级)

    日产汽车智联怎么使用(日产汽车智联怎么升级)

  • 华为gracl10是什么型号(华为graul10是什么手机)

    华为gracl10是什么型号(华为graul10是什么手机)

  • 怎么关闭airpods(怎么关闭airpodspro语音播报)

    怎么关闭airpods(怎么关闭airpodspro语音播报)

  • 怎么关注淘宝直播间(怎么关注淘宝直播间个人主播)

    怎么关注淘宝直播间(怎么关注淘宝直播间个人主播)

  • 拼多多震动提示怎么关(拼多多一直震动)

    拼多多震动提示怎么关(拼多多一直震动)

  • 蓝牙耳机语音怎么改成中文(蓝牙耳机语音怎么开)

    蓝牙耳机语音怎么改成中文(蓝牙耳机语音怎么开)

  • 美团如何购买会员红包(在美团上如何购买会员)

    美团如何购买会员红包(在美团上如何购买会员)

  • 手机app开发有哪些盈利模式(手机app开发有哪几种方法)

    手机app开发有哪些盈利模式(手机app开发有哪几种方法)

  • 腾讯视频怎么设置主设备(腾讯视频怎么设置共享设备)

    腾讯视频怎么设置主设备(腾讯视频怎么设置共享设备)

  • 土豆视频如何投屏(土豆视频怎么赚钱)

    土豆视频如何投屏(土豆视频怎么赚钱)

  • 滴滴打车平台抽成多少(滴滴打车平台抽成司机多少)

    滴滴打车平台抽成多少(滴滴打车平台抽成司机多少)

  • 网易考拉怎么开店(网易考拉怎么开通会员)

    网易考拉怎么开店(网易考拉怎么开通会员)

  • 织梦后台采集https目标站的一系列问题修正(织梦怎么导入数据库)

    织梦后台采集https目标站的一系列问题修正(织梦怎么导入数据库)

  • 商贸流通企业出口退税的会计处理怎么做
  • 税控盘的功能特点是
  • 税收 特征
  • 收入准则范围内
  • 营业成本和生产成本的公式
  • 交易性金融资产有哪些
  • 原始凭证分割单样本
  • 公户网上转账怎么撤回
  • 分支机构属于小型微利企业吗
  • 一般纳税人普票怎么做分录
  • 三栏式明细账月结
  • 公司把钱借给个人
  • 财务月末结转成什么账户
  • 租借车辆发生事故后的保险理赔问题
  • 个人股东之间股权转让的溢价账务处理
  • 无形资产摊销是谨慎性原则吗
  • 现金日记账支出是记借还是贷
  • 发票上的二维码可以扫金额吗
  • 企业所得税递增是什么意思
  • 承兑汇票章不清晰 情况说明
  • 查找我的iphone怎么添加设备
  • 会计记账凭证摘要模板
  • 工业增加值计算公式是什么
  • 人力资源劳务外包合同
  • deepin如何设置网络
  • php变量设置
  • 银行承兑汇票质押贷款骗局
  • 换购商品分录怎么做
  • PHP:pg_fetch_assoc()的用法_PostgreSQL函数
  • php fgets
  • 海关滞报金可以税前扣除吗 江苏
  • 出售固定资产减免的税款账务处理
  • 先预付货款,货到了怎么做账
  • vue父组件如何调用子组件的方法组合式api
  • CSS渐变背景应用
  • vue常用
  • vue动态路由是什么
  • chronyc配置
  • find命令详解查找文件
  • 小规模纳税人研发费用加计扣除优惠政策
  • wordpress配置数据库
  • System.Data.SQLite 数据库详细介绍
  • 帝国cms到底好不好
  • 供货商少开发票金额如何进行会计处理?
  • 固定资产卡片账是什么
  • 零申报步骤
  • 营改增抵减的销项税额是什么意思
  • 珠宝行业会计核算流程
  • 差旅费会计科目怎么做
  • 发放工资时社保为什么计入其他应付款科目
  • 其它权益工具投资和其他债权投资
  • 公户转私户的钱怎么退回来
  • 代开发票的弊端是如何体现的?
  • 暂估入库产品销售结转成本
  • 销项发票能不能退税
  • 企业注销其他应付款怎么处理账务
  • 企业要建账需留什么资料
  • 五险怎么做账
  • centos7安装教程详解
  • version 2什么意思
  • ubuntu怎么禁用nouveau
  • cyb2k.exe是安全进程吗 cyb2k进程危险吗
  • win1020h2更新卡在1
  • linux添加用户命令并添加管理员
  • 如何使用css进行网页布局,举例说明
  • OnApplicationFocus
  • python简单实现刷新智联简历
  • js 回调函数写法
  • psi python
  • 安卓作业电量广播
  • jquery实现图片横向移动
  • Python编程中装饰器的使用示例解析
  • 中国税务定额发票怎么开
  • 县税务局可以去市里吗
  • 国税网上办税大厅在哪
  • 成都税务举报电话多少
  • 重庆市电子税务局官网登录入口注册
  • 江苏省税务局电话咨询热线
  • portal
  • 地税局申报个人所得税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设