c++,指向同一位置的两个指针如何保存不同的值
c++, How do two pointers to same location hold different values
>有人向我展示了以下代码片段,并问它应该输出什么
#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
但它实际上打印10 20
.
它还表明两个贵重物品具有相同的地址。有人可以解释一下这里幕后发生的事情吗?
未定义的行为和优化编译器。编译器从value
的声明中知道value
的值在一个格式良好的程序中永远不会改变,所以它优化了检查value
值的位,只取它知道value
的值。
至于地址,你从不取p
的地址,而且p
和&value
相同并不奇怪,因为你在几行之前以这种方式分配了它。
相关文章:
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何访问由共享指针保存的类方法?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 是否可以保存带有参数的函数指针以供以后使用?
- 如何在C++中使用 void* 在指针作为对方法的引用传递时保存uint32_t的值
- 指向结构变量的指针未保存到eeprom
- 有没有办法在没有reinterpret_cast的情况下保存多种类型的指针?
- 在循环迭代期间将引用保存到矢量中的空指针
- 使用函数指针时,ESP 未在函数调用中正确保存
- 如何保存指向抽象基类的指针/引用,但在 c++ 中仍然可以复制
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 将const指针(EVP_MD)保存到变量中,以将其重新使用为类方法(HMAC)
- 我可以将某些对象的指针保存在向量中,而不是将指针调用内联函数
- 如何将指针保存到班级的每个对象
- 使用指向文件的指针保存矢量中的对象
- 班上的指针并将指针保存在数组中
- 在函数中创建值,然后将指针保存在全局指针数组中的值上
- 如何将指向基类的指针保存到另一个类的字段
- Do C/C++指针保存用户数据
- C/C++指针技巧(将指针保存到int,并转换回)