gpt4 book ai didi

c - 指针未给出 c 中的预期输出

转载 作者:行者123 更新时间:2023-11-30 14:46:43 25 4
gpt4 key购买 nike

为什么 double 变量不显示垃圾值?
我知道我在玩指针,但我是故意的。我的代码有什么问题吗?由于指针分配不兼容,它抛出了一些警告。

#include "stdio.h"

double y= 0;
double *dP = &y;
int *iP = dP;
void main()
{
printf("%10#x %#10x %#10x %#10x \n",&y,dP,iP,iP+1);
printf("%#10lf %#10lf %#10lf %#10lf \n",y,*dP,*iP,*(iP+1));
scanf("%lf %d %d",&y,iP,iP+1);
printf("%10#x %#10x %#10x %#10x \n",&y,dP,iP,iP+1);
printf("%#10lf %#10lf %#10d %#10d \n",y,*dP,*iP,*(iP+1));
}

Output

最佳答案

欢迎来到堆栈溢出。目前还不清楚您想用这段代码做什么,但我要说的第一件事是它完全按照它所说的那样做。它尝试使用错误的格式字符串格式化数据。结果是垃圾,但这并不一定意味着它看起来像垃圾。

如果想法的一部分是以十六进制打印出 double 的内部位模式,您可以这样做 - 但代码将取决于实现。以下内容应该适用于任何现代 32 或 64 位桌面实现,对于 doublelong long int 类型都使用 64 位:

double d = 3.141592653589793238;
printf("d = %g = 0x%016llX\n", d, *(long long*)&d);

%g 规范是一种以(通常)易于阅读的形式打印出 double 的快速方法。 %llX 格式以十六进制打印 unsigned long long int。字节顺序取决于实现;即使您知道 double 和 long long int 具有相同的位数。在 Mac、PC 或其他 Intel/AMD 架构计算机上,您将按照最高有效位在前的顺序进行显示。

*(long long *)&d 表达式(从右向左读取)将获取 d 的地址,并将其转换为 double* 指向 long long * 指针,然后取消引用该指针以获取要格式化的 long long 值。

本世纪几乎每个实现都使用 IEEE 754 格式作为硬件浮点。 64-bit IEEE format (aka double)

您可以在以下位置找到有关 printf 格式的更多信息: http://www.cplusplus.com/reference/cstdio/printf/

关于c - 指针未给出 c 中的预期输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52014023/

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