• 地址修改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
    地址和修改
    ---------------------------------

  • 相关阅读:
    第05组 Alpha冲刺(4/4)
    第05组 Alpha冲刺(3/4)
    第05组 Alpha冲刺(2/4)
    团队作业——总结
    beta版本发布-团队
    团队作业-Beta冲刺(周五)
    团队作业-Beta冲刺(周四)
    团队作业-Beta冲刺(周三)
    个人作业——Alpha项目测试
    团队项目第四次作业
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3106659.html
Copyright © 2020-2023  润新知