【发布时间】:2015-05-13 15:59:18
【问题描述】:
为了解释更多,我有两个结构 - 'first' 和 'second' 具有公共变量 'jack' 和 'jill'。我想通过基于 if-else 条件的指针打印插孔。 我明白在打印时我必须对 void 指针进行类型转换。但是指针指向结构 a 还是 b 取决于运行时间。 这是一个基本的 C 代码。如何克服?
代码
#include <stdio.h>
int main(void)
{
typedef struct one
{
int jack;
float jill;
}a;
typedef struct two
{
int jack;
float jill;
char something;
int something1;
}b;
a first;
b second;
void *z;
if(1)
{
a* z;
z = &first;
printf("First one");
}
else
{
b* z;
z = &second;
printf("Second one");
}
printf("%d\n", z->jack);
return 0;
}
错误
prog.c:36:17: warning: dereferencing 'void *' pointer printf("%d\n", z->jack); prog.c:36:17: error: request for member 'jack' in something not a structure or union
【问题讨论】:
-
你想做什么?
printf("b is %F", x)想要x的浮点参数(因为%f是浮点格式说明符)。不是void。由于与printf("Value is %d", *a)相同的原因,您将收到类似的错误。目前还不清楚你想要什么。无论哪种情况,您都想将值打印为浮点数吗? -
也不确定你想做什么,但如果你知道结果类型,你可以像这样
int intVal = *((int *) a); -
抱歉,潜伏者和 fbo3264 的信息模糊/错误。已更新 Q。
标签: c pointers if-statement casting void