我正在四处寻找我目前对C ++行为的理解结束的地方。我写了下面的代码,得到了一些非常意外的结果。
#include <iostream>
#include <cstddef>
using namespace std;
int main()
{
const char c = 'A';
cout << c << endl;
size_t l = (size_t)(&c);
char* d = (char*)l;
*d = 'B';
cout << (size_t)d << " " << (size_t)&c << endl;
cout << *d << " " << c << endl;
}
第一行按预期输出&#39; A&#39;在第二行,两个地址是相同的。但是,第三行输出&#34; B A&#34;。
显然这是一个糟糕的代码,但为什么c的价值没有变化(或者为什么它没有编译?)换句话说,如果它们都有相同的地址,为什么不#&# 39;他们有相同的价值吗?
如果重要,我的系统是MS Windows 7,x86上的GCC 4.8.1 64位。