C语言和C 中const,C++中const与C中的const使用对比

大家好晚上好,今天给大家分享的是,c++中的const的使用,在我们以前学习c语言的时候,我们已经接触了const的用法,那么在c++中,const的使用,又会有什么样的不同呢?接下来就开始我们的分享吧!每天进步一点点,日积月累你也是专家!

一、c语言中const的用法:

1、const修饰的变量是只读的,本质还是变量。

2、const修饰的局部变量在栈分配空间,这里举一个例子:

#include <stdio.h>

int main()

const int c =0;

int *p (int *)&c;

printf("start");

*p=6;

printf=("c=%d",c);

return 0;

最终演示结果可以看到,c的值发生了改变:

root@txp-virtual-machine:/home/txp/c++# ./a.out

start

c=6

3、const修饰的全局变量在只读存储区分配空间

4、const只在编译期有用,在运行期无用。

另外关于c语言里面常用的const几种用法,可以我之前写的文章(小声说提示一下,当时第一次写文章,排版排的差劲,还请理解!)超实用的const用法

二、c++中的const用法:

既然今天主题是C++中的const用法,想都不用想,c++中的const的用法和c语言里面的const用法肯定有不一样的地方,下面我们来看具体的用法:

1、当碰见const声明时在符号表中放入常量。

2、编译过程中若发现使用常量则直接以符号表中的值替换。

3、编译过程中若发现下面情况则给对应的常量分配存储空间

——对const常量使用了extern

——对const常量使用&操作符

注意:c++编译器虽然可能为const常量分配空间,但不会使用其存储空间中的值。

这里的话,还是以上面的那个例子来举例,我们现在在c++环境下来编译试试,最终结果会是什么情况:

root@txp-virtual-machine:/home/txp/c++# g++ test.cpp

root@txp-virtual-machine:/home/txp/c++# ./a.out

start

c=0

这时候突然发现,c的值居然还是零,有点难以置信;其实不然,这就是我们上面说的,在c++中,在上面的编译过程中会产生一个符号表的概念(符号表是编译器在编译过程中所产生的一张表,这张表是编译器内部的数据结构),我们还是拿刚才的那个示例来分析:

40d815988a45717205e2f87befe7d7f2.png

我们来分析一下,在c语言里面指针p初始化的时候,指向了c,然后在对指针p取值操作,也就是说,改变了这时候所p指向的那个地址(&c)处的内存里面的内容,原来是0,现在被改成了6;然而在我们的c++编译环境中,就不是按照这样来想的了,如上面的示意图,可以看到,在c++编译过程中会有一个符号表生成,那么当操作指针p的时候,由于c的值暂时被放到了符号表中了,所以的话,这个时候*p只是属于自己在那块内存中赋值操作而已,影响不到c的值了,下面我添加打印一下(*p)的值来说明:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值