首页 > 后端开发 > C++ > 为什么同一内存地址的 const 变量在 C 中显示不同的值?

为什么同一内存地址的 const 变量在 C 中显示不同的值?

Barbara Streisand
发布: 2024-11-28 17:26:14
原创
900 人浏览过

Why Does a Const Variable at the Same Memory Address Show Different Values in C  ?

同一地址处的变量产生不同的值

考虑以下代码片段:

#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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板