c++ - 指针类型转换

标签 c++ pointers casting void-pointers

我有以下代码,我想知道为什么我有以下输出:

#include <iostream>

int main() {
    double nValue = 5;
    void *pVoid = &nValue;

    short *pInt = static_cast<short*>(pVoid);

    std::cout << *pInt << std::endl; 
    return 0;
}

它输出“0”。我想知道为什么会这样。谢谢!

最佳答案

您有 UB(未定义行为),因为您违反了指针别名规则。这意味着任何事情都有可能发生。

例如,编译器有权期望 short* 永远不会引用 double 对象,因此它几乎可以解释 *pInt 随心所欲。

或者编译器可能按字面解释代码,而恰好在您的平台上,5.0 的二进制表示以两个(或 sizeof(short)) 字节的零。

关于c++ - 指针类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16614709/

相关文章:

c++ - C++ 映射可以包含指向我的任意类的指针吗?

c# - Excel RTD COM 服务器 - 无法将 UpdateEvent(类)转换为 IRTDUpdateEvent(接口(interface))

types - Python:测试值是否可以在列表理解中转换为 int

c++ - 如何在 C++ 中创建一个 max 函数来搜索数字序列中的最大值

C++ 函数,接受枚举并返回要在模板中使用的 typedef 类类型?

c++ - C++ CLI 是 C++ 的超集吗?

python - 将 ctypes 结构传递给 cython

C++ 开关与成员函数指针与虚拟继承

c++ - 如何在 C++ 对象中重现 Relax NG 规则?

java - 允许动态代理转换到任何兼容的接口(interface)。不管