0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

同样是const,为什么结果不一样?

学益得智能硬件 来源:学益得智能硬件 2023-02-02 16:03 次阅读

昨天有个学生去做C/C++软件工程师的笔试题,遇到了这么一个题目,来问我结果是多少?

bc0d0b5c-a2ce-11ed-bfe3-dac502259ad0.png

看似非常普通的一道C语言题目,如果不指定编译器,还真不知道结果是多少。

不信我来演示给你看下。

首先是用gcc来编译,就是C语言的编译器,语法没有问题,运行结果,num = 2。

root@Turbo:test# gcc test.c -o test

root@Turbo:test# 。/test

num = 2

root@Turbo:test#

同样的代码,换成g++来编译,就是C++的编译器,结果是num = 1。

root@Turbo:test# g++ test.c -o test

root@Turbo:test# 。/test

num = 1

root@Turbo:test#

都说C++是兼容C语言的,为什么在处理结果上却不同。

其实说兼容当然是没问题的,只是C语言和C++中const的作用不同。

C语言中,const修饰的是只读变量,意思是不能通过变量本身去修改对应内存的值,但是可以通过其他方式去修改,比如指针。代码中确实也是通过指针来修改的,所以num对应的那块内存值变了。

但是在C++中,const修饰的就是一个常量,跟define定义的宏有点类似,它存放在符号表中,接下来只要遇到这个常量,直接就是替换。

那么问题就来了,既然它没有存放在内存中,为什么代码中还能对他进行取地址的操作。

这一点主要还是为了兼容C语言,强行对它取地址,编译器会分配一块内存,并且把常量的值填在内存里面,然后取这块内存的地址进行运算。但是整个过程并不会影响常量的属性,代码下面遇到,还是直接替换。

const在C++中还有很多用处,修饰成员变量、修饰成员函数,所以学完了C语言,如果有精力,可以去看看C++,不为别的,学习C++可以更好的理解C语言。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7588

    浏览量

    135740
  • C++
    C++
    +关注

    关注

    21

    文章

    2094

    浏览量

    73442
  • CONST
    +关注

    关注

    0

    文章

    43

    浏览量

    8139

原文标题:同样是const,为什么结果不一样?

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    为什么labview公式节点内不同的公式形式结果不一样呢?

    上面两个程序其实是一样的,第个和第二个中公式节点内只是x的三次方和二次方形式不一样,但为什么结果图形中虚线的图线不一样呢?应该
    发表于 01-07 16:30

    ad620放大电路结果跟想要的结果不一样

    这个放大电路结果跟想要的结果不一样。怎么办, 想要的结果是4.5V
    发表于 05-13 20:37

    为什么同个电路,同样的参数,每次的仿真结果为什么会不一样,头疼

    用Multisim仿真个很简单的电路图,但是同个电路图,同个仿真参数,为什么仿真出来的结果不一样呢?跪求大神指点解答!
    发表于 05-15 17:17

    请问使用ActiveX需要注意什么吗?为什么两个同样程序框图的vi,运行结果不一样

    不一样?附件中的 Display PDF File-1.vi 是正常可以执行; Display PDF File-2.vi 却有错误,执行不出结果
    发表于 03-28 10:43

    程序编辑器结果不一样

    有个程序段int i=1;int j=0;j=((i++)*(i++));printf(“%d,%d\n”,i,j);在不同的编辑器结果为什么不一样 我用虚拟机的VI编辑结果i=3;j=1;用C++编辑
    发表于 03-13 02:22

    为什么我的泪滴不一样

    我的泪滴怎么和网上的不一样??
    发表于 03-13 15:23

    请问keil5代码一样但运行结果不一样是怎么回事?

    在用keil5的时候,两个一模一样的代码执行的结果不一样。经过多次测试都是这样的现象。不知道是不是我的环境配置有问题还是其他的?
    发表于 06-13 04:35

    这个仿真例程设置的参数一样,为何会出现不一样的仿真结果

    这个仿真例程设置的参数一样,为何会出现不一样的仿真结果
    发表于 12-23 09:08

    freeRtos和裸机 跑同样个程序,效率不一样

    freeRtos和裸机 跑同样个程序,效率不一样,RTOS只有个task,而且没有vTaskDelay 挂起。跑同样
    发表于 07-04 11:10

    同样的电机,电压等级、功率等都一样,为什么电机的励磁电压不一样呢?

    请教了好多人,都没有个真正的答案。 同样的电机,电压等级、功率等都一样,为什么电机的励磁电压不一样呢??
    发表于 11-17 08:28

    AD633在multisim上仿真,结果与预期不一样怎么解决?

    按照官方提供的除法电路,在multisim上仿真,结果与预期不一样,求高手解释
    发表于 11-17 10:53

    在车辆自燃方面,电动汽车和燃油汽车有什么不一样

    说起车辆的自燃问题,无论是纯电动汽车还是燃油车,都会有自燃的事件出现,对于同样是自燃,电动汽车和燃油车汽车有哪些不一样
    发表于 10-28 09:00 1132次阅读

    C++中不一样的重载是什么

    这里想分享C++中不一样的重载,即const重载。
    的头像 发表于 02-21 14:02 718次阅读
    C++中<b class='flag-5'>不一样</b>的重载是什么

    电容容量一样大小不一样能用吗

    有时候家里面电器中的电容损坏,很多人很难找到一模一样的来更换,能找到容量致的电容器就不容易了,电容容量一样大小不一样能用吗?
    的头像 发表于 09-21 09:54 2260次阅读

    不同芯片的DMA(Direct Memory Access)是不一样

    不同芯片的DMA(Direct Memory Access)是不一样
    的头像 发表于 10-16 09:14 1410次阅读