我只是想在递归函数中传递我的结构,但在函数中,当我再次传递它时,它将是我的结构的参数。我可以得到正确的值,但我得到了错误";从不兼容的指针类型[-Wincompatible指针类型]gcc传递"search"的参数1">
typedef struct node_t
{
int keyVal;
struct node_t *leftNode;
struct node_t *rightNode;
struct node_t *parent;
}Node;
typedef struct tree_t
{
struct node_t *root;
}List;
Node *search( List *temp, int value)
{
Node *curr=temp->root;
if (curr == NULL || curr->keyVal == value)
return curr;
if (curr->keyVal < value)
return search(&(curr->leftNode), value); //here I'm getting a warning
^^^
return search(&(curr->leftNode), value); //the same here
} ^^^
Node *search( List *temp, int value)
这将List
(也称为tree_t
(作为第一个参数。
在return search(&(curr->leftNode), value);
中,curr->leftNode
是Node
,也称为node_t
。这是不同的类型,编译器抱怨不兼容的指针类型是正确的。
一个可能的解决方案是将函数签名更改为Node * search( Node * curr, int value)
并删除Node *curr=temp->root;
。使用您的List
以search(x->root, xxx);
的身份执行第一个启动搜索的呼叫。这样递归调用就正确了。