const在c和c++中的异同

hello!大家好!
初次写博客,希望可以得到大家多多支持。
或者有什么意见和建议。
希望可以得到大家的评论。


     今天我想谈谈const在c和c++中的用法。
     首先,可能大家在刚一接触到const的时候,大家一致性的以为它仅仅就是一个来定义常量的关键字。
    
     eg:const int x=5;
     
     x呢,它是一个整形的变量,当你在它的前边加上const的时候,也就是将它变为一个常量。
     而我们知道,有一种比较常见的定义常量的方法:
    
     #define x 5;

    这句的意思就是说:
    定义一个常量x,并且给它赋值5.通俗点来说就是以后所写的代码里边只要是遇到x, 那么编译器就会自动用5来代替。
这个大家应该没有什么异议吧!
   但是呢,这也就意味着x的值是不能被修改的。
    比如下边这段代码:

当我们编译它的时候提示const不能被修改。
但是,它就真的不能被修改吗?
看下面这段代码:(注意:这是.c文件)
我们引入了一个指针来改变了它的值。
下面再看一段代码:(注意:这是.cpp文件)
可能大家都发现了一个问题:
同样的代码,同样的编译器,只是改变了文件的后缀名。却打印出了不一样的值。
那么,这到底是为什么呢?
简单点来讲:在c程序中const的含义就是,其所定义的名称,任然为一个变量名,但只是具有了常属性。
                     在c++程序中其表示的就是一个常量。是不允许被修改的。
但是,从c++程序来看,确实是修改了x的值。但是却为什么打印出了修改之前的值呢?
这就和编译环境有关了。不同的语言编译器对它的优化是不一样的。
直观来说:两者都修改了x在内存中的值。只是c++程序优化级别在这方面更加高于c程序。在编译器识别的const的时候就把x的值直接存储到了寄存器。以后的程序中要是用到x,系统就会直接从寄存器里边直接去取,是不会访问内存的。(但事实上,内存中已被修改)
哈哈。怎么样。这下弄清楚了吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值