gpt4 book ai didi

c - 在函数调用中省略 & 符号

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

我正在尝试用 C 实现 ADT 二叉树,我想使用 API,其函数的形式如 foo(object, value)。到目前为止,我为 int 值编写了工作树,但是当我调用 BinTree_insert 函数时,我必须使用运算符“&”来获取对象的地址。是否可以修改此函数以省略 & ?

typedef struct __bintree_node_t
{
int data;
struct __bintree_node_t* left;
struct __bintree_node_t* right;
}bintree_node_t;

static void __BinTree_insert(bintree_node_t** node, int value)
{
if(!(*node))
{
*node = __BinTree_newNode();
(*node)->data = value;
}
else if((*node)->data < value)
__BinTree_insert(&(*node)->left, value);
else if((*node)->data > value)
__BinTree_insert(&(*node)->right, value);
}

void BinTree_insert(bintree_node_t* node, int value)
{
//??????
}

int main(void)
{
bintree_node_t* root = 0;

BinTree_insert(root, 2); //sth like this
__BinTree_insert(&root, 1); //instead of this
}

最佳答案

您有以下选择:

  • 您可以返回一个新指针,而不是将传递的指针修改为指针。但这意味着使用返回值,这有点破坏了封装:

    static void BinTree_insert(bintree_node_t* node, int value)
    {
    if (!node)
    {
    node = __BinTree_newNode();
    node->data = value;
    }
    else if (node->data < value)
    node->left = __BinTree_insert(node->left, value);
    else if (node->data > value)
    node->right = __BinTree_insert(node->right, value);
    }

    int main(void)
    {
    bintree_node_t* root = 0;

    root = BinTree_insert(root, 2);
    }
  • 或者,如果您只想更改初始调用,您可以自己维护指针到指针:

    int main(void)
    {
    bintree_node_t* root = 0;
    bintree_node_t** rootPtr = 0;

    __BinTree_insert(rootPtr, 2);
    }
  • 或者您可以定义一个进一步封装指针的类型,但这会增加相当多的代码和内存分配。

但不确定重点是什么?

关于c - 在函数调用中省略 & 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55558522/

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