【发布时间】:2013-05-15 14:08:45
【问题描述】:
我们在我们的一个函数中返回一个指向结构的指针。当我们在 main 中打印出结构的一个值时,它是正确的。但是,当我们将该指针传递给另一个函数并尝试访问一个值时,它会打印出一个不正确的值。看起来该值是一个地址。
这些调用在我们的主目录中:
struct temp * x = doThis();
printf("x->var1 = %d\n", x->var1);
doThat(&x);
在 doThat 中,我们打印出:
void doThat(void * x)
{
struct temp * x2 = (struct temp *) x;
printf("x2->var1 %d", x2->var1);
}
doThis 函数返回一个 void 指针,doThat 函数接受一个 void 指针作为参数。
【问题讨论】:
-
很可能你需要
doThat(x)。 -
@KerrekSB 声明为
doThat(void * x); -
这不是告诉你,你必须编写这个团队中没有人能够解释的荒谬演员阵容吗?
-
通过使
doThat采用void*参数,您将禁用可以避免此问题的类型检查。为什么doThat不采用struct temp*或struct temp**? -
@KerrekSB:演员阵容是不必要的;
struct temp *x2 = x;会编译并具有相同的语义。