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

  • win10如何退出安全模式(win10如何退出安全模式下重启)

    win10如何退出安全模式(win10如何退出安全模式下重启)

  • 苹果xr面容解锁突然不能用是怎么回事(苹果xr面容解锁后怎么直接进入界面)

    苹果xr面容解锁突然不能用是怎么回事(苹果xr面容解锁后怎么直接进入界面)

  • 华为mate20有3.5耳机孔吗(mate20的耳机什么样子的)

    华为mate20有3.5耳机孔吗(mate20的耳机什么样子的)

  • 快手买东西拒收会产生运费吗(快手买东西拒收怎么操作)

    快手买东西拒收会产生运费吗(快手买东西拒收怎么操作)

  • 苹果6设置不了指纹锁(苹果6设置不了呼叫转移怎么办)

    苹果6设置不了指纹锁(苹果6设置不了呼叫转移怎么办)

  • 手机屏幕与机身分离有危险吗(手机屏幕与机身连接的那根线叫什么)

    手机屏幕与机身分离有危险吗(手机屏幕与机身连接的那根线叫什么)

  • 手机发热掉帧怎么解决(手机发热掉帧怎么处理)

    手机发热掉帧怎么解决(手机发热掉帧怎么处理)

  • i79700k用什么散热器(i79700kf用什么散热)

    i79700k用什么散热器(i79700kf用什么散热)

  • 在微信收藏里面删除的东西还可以找回吗(在微信收藏里面怎么录音呢)

    在微信收藏里面删除的东西还可以找回吗(在微信收藏里面怎么录音呢)

  • 手机wifi叹号无互联网连接(手机无线网叹号)

    手机wifi叹号无互联网连接(手机无线网叹号)

  • 手机按住说话怎么不能用了(手机按住说话怎么不出现字)

    手机按住说话怎么不能用了(手机按住说话怎么不出现字)

  • 512kbps能正常看视频吗(512kbps多快)

    512kbps能正常看视频吗(512kbps多快)

  • 华为matebook x尺寸

    华为matebook x尺寸

  • 微信朋友圈怎样评论图片(微信朋友圈怎样发长视频)

    微信朋友圈怎样评论图片(微信朋友圈怎样发长视频)

  • 快手热度是什么意思(快手热度有钱嘛)

    快手热度是什么意思(快手热度有钱嘛)

  • 手机进水没信号怎么办(手机进水没信号修理一般要多少钱)

    手机进水没信号怎么办(手机进水没信号修理一般要多少钱)

  • word上角标怎么弄(word上角标怎么去掉)

    word上角标怎么弄(word上角标怎么去掉)

  • 分辨率和尺寸的关系(分辨率和尺寸的区别)

    分辨率和尺寸的关系(分辨率和尺寸的区别)

  • 快手视频尺寸比例是多少(快手视频尺寸比例怎么调)

    快手视频尺寸比例是多少(快手视频尺寸比例怎么调)

  • 云电脑有ios版的吗(云电脑有ios版下载)

    云电脑有ios版的吗(云电脑有ios版下载)

  • 收钱码姓名能隐藏吗(微信收钱码如何隐藏姓名)

    收钱码姓名能隐藏吗(微信收钱码如何隐藏姓名)

  • pr怎么删除视频自带音频(pr怎么删除视频声音)

    pr怎么删除视频自带音频(pr怎么删除视频声音)

  • 微信怎么设置密码锁不让别人看(微信怎么设置密码才能进入)

    微信怎么设置密码锁不让别人看(微信怎么设置密码才能进入)

  • 小米摄像机怎么换wifi(小米摄像机怎么看回放)

    小米摄像机怎么换wifi(小米摄像机怎么看回放)

  • 手机钉钉在哪设置休假(手机钉钉如何)

    手机钉钉在哪设置休假(手机钉钉如何)

  • deepin20隐藏文件怎么取消隐藏? deepin显示隐藏文件的方法(deepin隐藏分区)

    deepin20隐藏文件怎么取消隐藏? deepin显示隐藏文件的方法(deepin隐藏分区)

  • 结构重参数化(Structural Re-Parameters)PipLine(结构重参数化2d pose)

    结构重参数化(Structural Re-Parameters)PipLine(结构重参数化2d pose)

  • 织梦删除服务器中多余的没有被调用的图片(织梦安装完要删除哪个文件)

    织梦删除服务器中多余的没有被调用的图片(织梦安装完要删除哪个文件)

  • 建筑企业如何预交增值税
  • 工商年报已报网上还查不出来
  • 暂估冲回账务处理
  • 一般纳税人外地预交税款怎么预缴
  • 未达起征点附加税还需要扣税嘛
  • 生产性资金是生产资料吗
  • 小微企业应纳税所得额超过300万怎么办
  • 附加税预缴分录
  • 酒店开办费
  • 内涵报酬率和必要投资报酬率
  • 非专利技术转让计入什么科目
  • 所得税申报更正申报怎么报?
  • 税务局可以委托公司代征税,你觉得可能吗?
  • 建筑工程公司是什么意思
  • 多收账款怎么账务处理
  • 现金收取业务办理流程
  • 月饼税收分类属于哪一类食品
  • 公司发生业务分录
  • 统一信用社会代码怎么填
  • 税务实名认证怎么认证
  • 销售费用变动率公式
  • 电子发票没有发票号码是怎么回事
  • 物业公司收空调费怎么交税
  • 城镇土地使用税每年都要交吗
  • 危险废物处置是冶金行业吗
  • win10更新windows
  • 无形资产的摊销计入什么科目
  • linux添加系统用户命令
  • php发送邮件代码
  • mac应用程序图标
  • PHP:imageconvolution()的用法_GD库图像处理函数
  • 陈列费用明细表怎么做
  • 【AIGC】1、爆火的 AIGC 到底是什么 | 全面介绍
  • Laravel+jQuery实现AJAX分页效果
  • read命令 linux
  • lvm 创建
  • 盘盈的存货账务怎么处理
  • 公司少申报个税
  • 营业执照增加经营范围要钱吗
  • 固定资产盘亏是管理费用吗
  • 个税没有达到起征点能摇号吗
  • SQL Server 2005 DTS导入平面数据出现错误解决方案
  • 保税区商品可以开发票吗
  • 业务招待费的列支范围
  • 普通发票和增值税普通发票一样吗
  • 个人所得税率怎么退
  • 金税盘维护费应该计入什么科目
  • 在税收方面属于什么领域
  • 增值税加计抵减企业所得税如何处理
  • 帮别人维修东西怎么开票
  • 油卡充值做账
  • 银行代扣水电费发票到哪里打
  • 公司为员工购买汽车怎么申报
  • 费用报销银行转账用途怎么写
  • 账务不实与账实不符
  • 工会经费属于什么科目
  • 公司委托公司收款范本
  • sql server 2005如何使用
  • soft version
  • windows延缓写入失败怎么修复
  • win7系统如何打开
  • 为什么windows删除文件很慢
  • win8怎么进去安全模式
  • win8怎么停止自动更新
  • 如何让xp系统崩溃
  • linux中ctrl+c
  • win10桌面预览功能怎么打开
  • node.js获取文件信息的方法是什么
  • android本地保存数据
  • windows下载安装
  • python 数据处理 pdf
  • 基于flask框架
  • js parsefloat parseint 转换函数
  • JavaScript电子时钟倒计时
  • 利息发票可以抵扣进项税额吗
  • 税务备案超过15天
  • 太原市小店区电影院营业时间
  • 河北税务登录密码是多少
  • 购置税周天上班吗
  • 国税系统如何变更财务负责人
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设