找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2332|回复: 0
打印 上一主题 下一主题
收起左侧

[C++]笔记十七 C语言中 “冒牌货”const和const符号表

[复制链接]
跳转到指定楼层
楼主
C语言中 “冒牌货”const和const符号表
.c文件中程序:
编译就知道C语言编译器会报错,说变量a常量,常量是不能当左值的这样看来,好像a是定义的一个常量,不能修改!

修改程序:
定义一个指向变量a的指针变量p,通过指针修改指针p所指向位置的值,也就是a的值,编译运行:
我们发现a的值变成了20被修改了!
也就是说我们通过指针间接修改了a的值,也就是说在c语言中const是个冒牌货”。

同样的代码,我们运行在C++环境下:
发现运行结果跟C语言环境不同,在C++并没有改变变量a的值。
所以,在C++中,const是一个真正的常量

问题原因分析:
因为C++编译器对const做了加强,当C++编译器扫描到const常量声明时,它不会C语言一样为const单独分配内存。
C++中,int const a = 10;之后,C++编译器会将a放到一个符号表里面,符号表的存在形式:
我们定义常量a=10key就是avalue就是10这个值就是锁死了,不能变的当使用a的时候,就会从符号表里面把10拿出来
当对a变量地址的时候,C++编译器会为a单独的开辟一块内存空间,p = (int *)&a;然后这个内存空间赋给指针p,就是p指向这个内存空间。
通过*p去间接修改的值,是这个新开辟的内存空间的值,而不是符号表中a的值,我们让*p=20、30100…修改的都是新开辟内存空间中的值。我们可以通过打印*p去验证这两个区域并不是一回事。


结论
C语言中的const变量
C语言中的const变量是只读变量,有自己的存储空间。
C++中的const变量
可能分配存储空间,也可能不分配存储空间
当const常量为全局,并且需要在其它文件中使用分配内存空间;
当使用&操作符const常量的地址分配内存空间

【C++】笔记系列均为原创,转载请注明转自微号:Lightspeed-Tech  或  AutoCode
更多精彩资料,请关注!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表