同一地址处的变量产生不同的值
考虑以下代码片段:
#include <iostream> using namespace std; int main(void) { const int a1 = 40; const int* b1 = &a1; char* c1 = (char *)(b1); *c1 = 'A'; int *t = (int*)c1; cout << a1 << " " << *t << endl; cout << &a1 << " " << t << endl; return 0; }
此代码令人惊讶地输出:
40 65 0xbfacbe8c 0xbfacbe8c
变量怎么可能同一地址的 a1 会产生两个不同的值,40 和 65?
答案:
此行为是未定义行为的结果。该代码修改了 const 变量 (a1) 的值,违反了 C 的规则。根据 C 标准(第 7.1.6.1 节第 4 段),任何在其生命周期内修改 const 对象的尝试都会导致未定义的行为。
在这种情况下,通过指针 c1 修改 const 变量 a1 会导致不可预测的结果。编译器可能会以记录的方式忽略修改、行为,甚至终止程序。
因此,观察到的行为(其中 a1 生成两个不同的值)是未定义行为的结果。强烈建议不要修改 const 变量,这可能会导致不可预测和错误的程序行为。
以上是为什么同一内存地址的 const 变量在 C 中显示不同的值?的详细内容。更多信息请关注PHP中文网其他相关文章!