Null / void指针值不正确

时间:2013-05-20 22:23:54

标签: c pointers struct

我们正在返回一个指向我们其中一个函数的结构的指针。当我们在main中打印出struct的一个值时,它是正确的。但是,当我们将该指针传递给另一个函数并尝试访问某个值时,它会输出一个不正确的值。看起来该值是一个地址。

这些电话是我们的主要内容:

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指针作为参数。

1 个答案:

答案 0 :(得分:8)

doThat中,您将x投射为struct temp*,但是传入了struct temp**

您可以在此处看到类似的结果:running code

改变自:

struct temp * x2 = (struct temp *) x;
printf("x2->var1 %d", x2->var1);

要:

struct temp ** x2 = (struct temp **) x;
printf("(*x2)->var1 %d", (*x2)->var1);

将解决此问题。或者,不要通过改变:

来传递指针指针
doThat(&x);

要:

doThat(x); /* <= Note: Don't take the address of x here! */