通过C中的void指针检查结构的元素

时间:2014-03-17 22:41:12

标签: c pointers struct void-pointers

我有一个关于迷宫求解算法的任务,我使用路径树来解决它,这些是我的结构:

typedef struct node* nodePtr;
typedef struct root{
    int coordX;
    int coordY;
    nodePtr child[4];
} root;

typedef struct node{
    int coordX;
    int coordY;
    char val;
    nodePtr child[3];
    void* parent;
} node;

父指针可以是指向root的指针,也可以是指向节点的指针,以便在树中没有循环。我在分配节点时检查了这个问题:

void assignNode(nodePtr *nodeAddr, int x, int y, char **maze, void *parent){
...some codes...
if(y != parent->coordY && x != parent->coordX)

这是我遇到恼人的错误

dereferencing 'void *' pointer
error: request for member 'coordY' in something not struct or union
error: request for member 'coordX' in something not struct or union

1 个答案:

答案 0 :(得分:1)

您无法像这样取消引用void*。它需要知道指针的类型(在您的情况下为node*root*)。因此,您需要typecast指针(node*root*)。在这种特殊情况下,作为节点。 即而不是

if(y != parent->coordY && x != parent->coordX)

if(y != ((node*)parent)->coordY && x != ((node*)parent)->coordX)

但是因为它是你的代码,正如你所提到的那样,它可能是指针(node*root*)的一种,你需要有一些方法来识别它,然后适当地进行类型转换。