为什么同一个内存位置同时保持不同的值?

时间:2013-06-24 18:33:23

标签: c++

相同的内存位置如何在以下程序中保存不同的值? 我正在使用g ++编译器。

代码:

#include<iostream>
using namespace std;

int main()
{
   const int i=100;
   int *j = const_cast<int*>(&i);
   *j=1;

   cout<<"The value of i is:"<<i<<endl;
   cout<<"The value j holds:"<<*j<<endl;
   cout<<"The address of i is:"<<&i<<endl;
   cout<<"The address of j is:"< <j<<endl;

}

输出:

The value of i is:100
The value j holds:1
The address of i is:0xbffbe79c
The address of j is:0xbffbe79c

2 个答案:

答案 0 :(得分:6)

你有未定义的行为,所以任何事情都可能发生。在这种情况下,编译器知道i不能更改值,并且可能只是直接使用该值。

答案 1 :(得分:4)

内存不能同时保存不同的值。但是,修改声明为const的对象是 undefined-behavior ,因此任何事情都可能发生。

任何包括使它看起来像同一个内存位置同时持有不同的值。会发生的事情是,由于i无法更改,因此它是常量折叠的候选者,因此当i出现在表达式中时,不会涉及任何内存。