在C中返回指向结构的指针

yadav_vi

return指向结构指针感到困惑
我写了一篇AVL Tree这是我的头文件片段

typedef struct AVLNode {
    struct AVLNode  *left,
                    *right;
    int value,
        height;
} AVLNode;

typedef struct AVLNode *AVLTree;
AVLNode *delet(int value, AVLTree t);

这里是我delet()main()-

AVLNode *delet(int value, AVLTree t)
{
    if (t == NULL) {
        printf("Node not found\n");
        return t;
    }
    else if (value == t->value) {
        .....
        return t;
    }
    else if (value < t->value) {
        if (t->left != NULL) {
            t->left = delet(value, t->left);
        }       
        if (height(t->left) - height(t->right) == 2) {
            if (t->value < t->left->value)
                    t = rotateR(t);
            else
                    t = rotateLR(t);
        }
        .....
        return t;
    }
    else if (value > t->value) {
        if (t->right != NULL) {
            t->right = delet(value, t->right);
        }
        .....
        return t;
    }
}

void main()
{
    AVLTree t = NULL;
    .....
    t = delet(4, t);    /* works fine */
    delet(4, t);        /* gives improper results */
    .....
}


在这里,我返回t(类型为AVLNode *)。虽然我意识到这对于
递归delet()调用至关重要,但我不了解的是-

  • 当我打电话t = delet(4, t)main()它给了我正确的结果,反之,只是打电话delet(4, t)给错误的结果。
  • 如果我在delet(t)tAVLNode *)中传递了一个指针,为什么我需要再次将其收集到一个指针中?
你不担心孩子

这是因为您已通过AVLTree t“按值”传递通过地址tdelet然后修改它。

现在,您只修改AVLTree tdelet函数中声明的本地副本
AVLNode *delet(int value, AVLTree t)

尝试将函数声明为AVLNode *delet(int value, AVLTree *p_t),调用将为delet(4, &t);

编辑:(在AT OP的评论)

当您需要在函数内部修改值时:

void swap(int a, int b)
{
  int t;
  t = a;
  a = b;
  b = t;
}

这是行不通的,因为您需要进行修改,a并且需要将b其“副本”粘贴到该函数上。

同样,在您的情况下,您需要修改指针所拥有的地址AVLTree t,即指针本身,因此需要在此处传递“指针的地址”,而不是指针所拥有的地址的副本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否在C中的结构内返回指向char数组的指针?

来自分类Dev

指向C中结构的指针

来自分类Dev

C函数返回指向结构的指针

来自分类Dev

c ++从函数返回指向结构的指针

来自分类Dev

从现有结构数组中查找并返回指向结构的指针

来自分类Dev

在Python中访问指向结构的C指针

来自分类Dev

指向c中的结构的sizeof指针

来自分类Dev

指向c中匿名结构数组的指针

来自分类Dev

指向C ++结构的指针

来自分类Dev

从C ++中的函数返回指向数组的指针?

来自分类Dev

从C ++中的函数返回指向数组的指针?

来自分类Dev

C#Marhsal函数返回指向结构数组的指针

来自分类Dev

动态分配的指向不从 C 函数返回的结构的指针

来自分类Dev

从 C 中的 Dart_NativeArguments 结构获取指向结构的指针

来自分类Dev

返回指向结构体的指针数组的指针

来自分类Dev

C ++:删除指向结构的指针

来自分类Dev

C typedef:指向结构的指针

来自分类Dev

指向结构体中的指针的指针

来自分类Dev

指向结构指针的指针中的内存分配

来自分类Dev

指向C中的前向声明结构数组的指针

来自分类Dev

从指向C中的结构的指针数组获取信息

来自分类Dev

C中的结构内的指针指向的自由数组

来自分类Dev

指向结构中数组的C指针传递给函数

来自分类Dev

如何理解这个指向C中数据结构的指针?

来自分类Dev

指针从C中的extern结构返回NULL

来自分类Dev

在C中返回包含本地指针的结构

来自分类Dev

如何从函数返回指向结构的指针?

来自分类Dev

C结构,指向结构的联合指针

来自分类Dev

C返回结构指针