1

相同的内存位置如何在以下程序中保存不同的值?我正在使用 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
4

2 回答 2

6

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

于 2013-06-24T18:35:02.960 回答
4

内存不能同时保存不同的值。但是,修改已声明的对象const未定义行为,因此任何事情都可能发生。

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

于 2013-06-24T18:35:06.490 回答