【问题标题】:c++, How do two pointers to same location hold different values [duplicate]c ++,指向同一位置的两个指针如何保存不同的值[重复]
【发布时间】:2014-12-07 03:43:07
【问题描述】:

有人给我看了下面的代码sn-p,问它应该输出什么

#include <iostream>
using namespace std;

int main() {
    const int value = 10;
    int* p = (int*)&value;
    *p = 20;

    cout << value << " " << *p << endl
        << &value << " " << p << endl;

    return 0;
}

如你所见,有一个常量value是10,还有一个指针p指向值的地址,那么指向的地址得到不同的值。

我希望程序打印 20 20 but it actually prints 10 20.
这也表明这两个贵重物品具有相同的地址。有人能解释一下幕后发生的事情吗?

【问题讨论】:

  • 未定义的行为...?
  • @remyabel 也许但是发生了什么?
  • How is a variable at the same address producing 2 different values? ...试图修改一个常量对象是未定义的行为这个问题很可能是重复的。
  • @Shafik 不确定什么问题 n.m.标记为重复,但您链接的那个似乎是一个公平的重复。是否真的有必要让回答者因为基本上重复相同的信息而获得代表?
  • @remyabel 是的,但我回答了这个问题,所以我不会关闭它,可能有更好的重复,但我没有时间看。看到这个meta question

标签: c++ c constants compiler-optimization


【解决方案1】:

未定义的行为和优化的编译器。编译器从value 的声明中知道 value 的值在格式良好的程序中永远不会改变,因此它优化了将检查value 值的位并且只取它知道value 的值。

至于地址,你从不使用p的地址,p&amp;value 相同并不奇怪,因为你在几行之前就是这样分配的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多