首页 > 后端开发 > C++ > 正文

为什么通过非常量指针修改'const”值会导致未定义的行为,但仍然为指针和原始变量打印不同的值?

Barbara Streisand
发布: 2024-10-28 04:47:02
原创
226 人浏览过

Why does modifying a `const` value through a non-const pointer lead to undefined behavior but still print different values for the pointer and the original variable?

通过非常量指针修改 const

考虑以下代码:

<code class="cpp">const int e = 2;

int* w = (int*) &e;          // (1) cast to remove const-ness
*w = 5;                        // (2)

cout << *w << endl;            // (3) outputs 5
cout << e << endl;             // (4) outputs 2

cout << "w = " << w << endl;   // (5) w points to the address of e
cout << "&e = " << &e << endl;</code>
登录后复制

In (1 ), w 指向 e 的地址。在(2)中,该值更改为5。但是,当显示*w和e的值时,它们的值是不同的。但如果打印指针 w 和 e 的地址,它们的值是相同的。

为什么 e 变成了 5,仍然包含 2?它们是否存储在单独的位置?还是临时的?但为什么w指向的值仍然是e的地址呢?

回答

一旦修改了const值,就进入了未定义的行为领域。然而,推测:

  • (3) 和 (4): *w 在运行时计算,而 e 被视为编译时常量。因此,打印的值不同。

以上是为什么通过非常量指针修改'const”值会导致未定义的行为,但仍然为指针和原始变量打印不同的值?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!