gpt4 book ai didi

c - 在结构上打印指向 void 的指针时出现问题

转载 作者:太空宇宙 更新时间:2023-11-04 05:36:10 27 4
gpt4 key购买 nike

#include <stdio.h>

typedef struct elem{

void * d;

}Elem;

main(){

Elem *p;
Elem e;

double pi = 3.14;

e.d = &pi;
p->d = &pi;

printf("%f\n",p->d);
printf("%f\n",e.d);


}

main.c:25: 警告:格式“%f”需要类型“double”,但参数 2 的类型为“void *”

main.c:26: 警告:格式“%f”需要类型“double”,但参数 2 的类型为“void *”

我在尝试正确打印这些值时遇到了问题。我得到的值与 3.14 无关。

最佳答案

在您的代码中,首先,您需要在取消引用之前为 p 分配内存。否则,它调用 undefined behavior .否则,p 是一个未初始化的指针并指向一个内存,您的程序可能无法访问该内存,因此本质上是一个无效的内存位置。任何取消引用该指针的尝试都将调用 UB。

在那之后,

  printf("%f\n",p->d);
printf("%f\n",e.d);

调用 undefined behavior ,因为您实际上是在尝试使用 %f 格式说明符打印地址。

你要做的就是

  1. void 指针转换为 float 指针(因为,您不能取消引用 void *)

    <
  2. 然后,去引用指针以获取值。

喜欢

  printf("%f\n",*((float *)(p->d)));
printf("%f\n",*((float *)e.d));

也就是说,main() 应该是 int main(void),至少,是标准投诉。

关于c - 在结构上打印指向 void 的指针时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35070851/

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