【发布时间】:2016-01-28 19:58:02
【问题描述】:
#include <stdio.h>
typedef struct elem{
void * d;
}Elem;
main(){
Elem *p;
Elem e;
double pi = 3.14;
e.d = π
p->d = π
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 无关。
【问题讨论】:
-
*(float*)e.d或*(float*)p->d -
@im 也是 UB。
%f需要双倍。它也是UB,因为它指向的对象是double。这违反了严格的别名规则。
标签: c pointers printing void-pointers