首页  >  文章  >  后端开发  >  为什么通过非常量指针修改“const”值会导致未定义的行为,但仍然为指针和原始变量打印不同的值?

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

Barbara Streisand
Barbara Streisand原创
2024-10-28 04:47:02227浏览

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn