【发布时间】:2014-11-18 13:13:49
【问题描述】:
编辑:
我得到的确切错误是: 错误:在不是结构或联合的东西中请求成员“q”
我更正了代码中留下的错别字。它是在为 SO(camel case..) 格式化时发生的。
上下文
设置指向结构的 void 指针的问题。
我最初的目标:我想从一个空指针指向一个结构。 pointMe.a 将指向 pointMe2,以便我可以将 pointMe2.q 设置为整数。
我的最终目标:能够将 void 指针转换为任何东西,同时重用我的 pointMe 结构。也许我可以指向一个结构,然后很快指向一个字符或整数。我认为是多态性。
失败
显然,在下面代码的 3) 中,q 不是结构或联合的一部分。 查看指针地址,我知道我很接近但还没有。
我的时髦代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
void * a;
}pointMe;
typedef struct {
int q;
}pointMe2;
int main(void)
{
pointMe arrow;
pointMe2 * flesh;
flesh = malloc(sizeof(pointMe2));
flesh->q = 4;
printf("1)\n Value: %d Address: %p\n",flesh->q,flesh );
arrow.a = flesh;
printf("2)\n arrow.a's address: %p flesh's address: %p\n",arrow.a,flesh );
printf("3)\n arrow.a's address: %p Value of q : %d\n",arrow.a, *(arrow.a)->q );
free(flesh);
return 0;
}
【问题讨论】:
-
arrow.a不是arrow.a的地址,但它的价值。永远不要混淆指针和指针,即使两者都应该是指针。指针本身就是对象。 -
我在 3) %p 中替换为 %d。我的错,对不起
-
你试过我建议的代码了吗?