gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:20:20 24 4
gpt4 key购买 nike

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

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;

父指针可以是指向根的指针,也可以是指向节点的指针,以免树中出现循环。我在分配节点时检查了这个问题:

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

最佳答案

您不能像这样取消引用 void*。它需要知道指针的类型(在您的情况下是 node*root*)。因此,您需要对指针进行类型转换(node*root*)。在这种特殊情况下,作为节点。即代替

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

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

但是由于它是您的代码,正如您提到的,它可以是任何一种指针(node*root*),您需要有某种方法来识别然后进行适当的类型转换。

关于通过 C 中的 void 指针检查结构体的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22466930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com