zoukankan      html  css  js  c++  java
  • 地址修改const变量真的不能修改吗?

    在本篇文章中,我们主要介绍地址修改的内容,自我感到有个不错的建议和大家分享下

        昨天在写程序时,突然想到了一个问题:const变量真的不可改变吗?如果能改,应当怎么改?于是乎,就决定着手操作一番,结果程序的结果有点出其不意。但是终究还是得出了结论。若有不当,欢送各位拍砖!

        下面就来看一下这个简略的程序:

    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {	
    	const int sum = 0;
    	cout << "sum的初始值是:" << sum << endl;	
    	int *result = const_cast<int *>(&sum);
    	*result = 20;
    
    	cout << "sum的值现在是:" << sum << endl;
    	cout << "result的值现在是:" << *result << endl;
    	cout << "sum的地址是:" << &sum << endl;
    	cout << "result的地址是:" << result << endl;
    	getchar();
    
    	return 0;
    }

        程序的运行结果:

    sum的初始值是:0
    sum的值现在是:0
    result的值现在是:20
    sum的地址是:0012FF60
    result的地址是:0012FF60

        怎么是这样的结果:这下让我有点迷茫,但是也感到更有意思了。刚开始我觉得,只要使用指针指向这个const常量,就可以修改,结果发明这样并不能修改const常量。通过程序的结果我们不难发明,result指向的地址确实是sum的地址,一样的地址为什么打印出来的值却不一样呢?原因是这样的:对于这类const常量,其值在编译期间是不知道的。这就意味着须要存储空间,而编译器不想保留它的符号表中的任何东西,而且一旦初始化,其值就不能改变。虽说result指向了sum的地址,可实际上指向的却是sum常量的一个拷贝的地址。当再次使用sum时,就会发明sum的值并没有被改变!

        每日一道理
    心是一棵树,爱与希望的根须扎在土里,智慧与情感的枝叶招展在蓝天下。无论是岁月的风雨扑面而来,还是滚滚尘埃遮蔽了翠叶青枝,它总是静默地矗立在那里等待,并接受一切来临,既不倨傲,也不卑微。
      心是一棵树,一个个故事被年轮携载;一回回驿动与飞鸟相约;一次次碰撞使它绵密柔韧;一幕幕经历造就了它博广的胸怀。心是一棵树,独木不成林。因此,树与树既独立又相联,心与心既相异又相亲。

        还有另一种情况:

    #include <iostream>
    
    using namespace std;
    const int sum = 0;
    
    int main(void)
    {
    	cout << "sum的初始值是:" << sum << endl;	
    	cout << "sum的地址是:" << &sum << endl;
    	int *result = const_cast<int *>(&sum);
    	*result = 20;
    
    	cout << "sum的值现在是:" << sum << endl;
    	cout << "result的值现在是:" << *result << endl;
    	cout << "sum的地址是:" << &sum << endl;
    	cout << "result的地址是:" << result << endl;
    	getchar();
    
    	return 0;
    }

        这类情况是编译期间的const,通过实验,这类方法修改const,程序基本不能运行,直接报错。原因是这样的:在这个程序中,sum是一个全局变量,C++编译器不会为其分配空间,而是直接将其保存在符号表中,待要取得const常量地址时,再迫使编译器为其分配空间,所以,当result指向sum,并试图修改其内容时就会出现:在此位置写入时产生访问冲突错误!

        地址和修改

        总结:所以通过这类方法,是不能修改const常量的!

    文章结束给大家分享下程序员的一些笑话语录: N多年前,JohnHein博士的一项研究表明:Mac用户平均IQ要比PC用户低15%。超过6000多的参加者接受了测试,结果清晰的显示IQ比较低的人会倾向于使用Mac。Mac用户只答对了基础问题的75%,而PC用户却高达83%。

    --------------------------------- 原创文章 By
    地址和修改
    ---------------------------------

  • 相关阅读:
    9.9递归和动态规划(七)——实现很多图片编辑软件都支持的“填充颜色”功能
    使用azure send grid发送email
    (C++ STL)list的实现
    安卓源代码----安卓系统启动过程(初次研究源代码,表述不当还请见谅)
    Mqtt协议IOS端移植3
    [Servlet&amp;JSP] 标准标签
    table合并单元格
    解决chrome浏览器对于自动填充的input表单添加的默认的淡黄色背景问题 && 一般的浏览器input和button的高度不一致问题
    如何使一个div能够铺满整个页面? && 模态框的制作 && outerHTML
    原生js实现轮播图
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3106659.html
Copyright © 2011-2022 走看看