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

看似非常普通的一道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语言
+关注
关注
183文章
7642浏览量
144622 -
C++
+关注
关注
22文章
2122浏览量
76714 -
CONST
+关注
关注
0文章
45浏览量
8683
原文标题:同样是const,为什么结果不一样?
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
为什么labview公式节点内不同的公式形式结果不一样呢?
为什么同一个电路,同样的参数,每次的仿真结果为什么会不一样,头疼
请问使用ActiveX需要注意什么吗?为什么两个同样程序框图的vi,运行结果不一样?
程序编辑器结果不一样
请问keil5代码一样但运行结果不一样是怎么回事?
freeRtos和裸机 跑同样一个程序,效率不一样
同样的电机,电压等级、功率等都一样,为什么电机的励磁电压不一样呢?
在车辆自燃方面,电动汽车和燃油汽车有什么不一样
电容容量一样大小不一样能用吗
不一样的展会,不一样的精彩:2025湾芯展顺利收官
不一样的展会,不一样的精彩 2025湾芯展圆满收官

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