gpt4 book ai didi

C++ 双指针到长指针的转换

转载 作者:行者123 更新时间:2023-11-28 08:04:43 25 4
gpt4 key购买 nike

考虑下面的代码片段:

double * p = new double[16];

int value = 1;
void * q = p;
*((double *)q) = value;

int x = ((long *)p)[0];

cout << "Value of x for double * to long * = " << x << endl;

*((int *)q) = value ;

x = ((long *)p)[0];

cout << "Value of x for int * to long * = " << x << endl;

此处输出分别为 0 和 1。谁能给我解释一下为什么?

此外,如果我直接访问指针处的值...即。 p[0],在这两种情况下,该值都正确显示为 1。为什么?

最佳答案

整数以直接二进制形式存储在内存中,因此您可以在 intlong 之间毫无问题地进行转换。 doulbe 使用浮点二进制语法存储,其中一些位用于描述尾数,其他位用于描述指数(类似于科学记数法,即 5e2 = 500)。

如果您尝试将 double 的数据用作 double 的数据,那么由于二进制存储值的不同方式,它不会正确转换。

关于C++ 双指针到长指针的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10510468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com