我有以下代码,我想知道为什么我有以下输出:
#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/