c - 递归结构(二叉树): obtain values via struct pointer from inside function

标签 c function pointers struct

我的任务是实现一个基本的二叉树。树的节点是包含三个字段的结构,一个整数值和指向左右子节点的指针:

typedef struct node {
    int    value;
    struct node *child_left;
    struct node *child_right;
} node;

一个新的节点结构被初始化为:

node node_init(int value, node *child_left, node *child_right) {
    node   k = {value, child_left, child_right};
    return k;
}

在父节点的左子节点中存储值的函数:

int insert_left(node *t, int value) {

    node k = node_init(value, NULL, NULL);

    if (t->child_left == NULL) {
        t->child_left = &k;
    }
    else {
        k.child_left  =  t->child_left;
        t->child_left = &k;
    }
}

打印左 child 值的函数(这就是问题所在):

int node_print(node k) {
    printf("%d", k.child_left->value);
}

测试基本二叉树的主要函数:

int main(int argc, char* argv[]) {

    node root  = node_init(7, NULL, NULL);

    insert_left(&root, 3);
    printf("%d\n", root.child_left->value);
    node_print(root);
}

运行此示例,直接调用 printf() 正确打印 3 作为左子节点的值,但 node_print() 输出地址值指针的,例如-406140704。

这可能是一个常见且无处不在的问题,但如何从 node_print() 函数内部正确访问 value 字段?如果可能,请指导我阅读一些解释性读物。

最佳答案

您的 init 函数使用了一个局部变量,该变量在函数返回后不再可用。将其更改为:

node *node_init(int value, node *child_left, node *child_right) {
    node   *k = malloc(sizeof(*k));
    k->value= value;
    k->child_left= child_left;
    k->child_right= child_right;
    return k;
}

关于c - 递归结构(二叉树): obtain values via struct pointer from inside function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55196540/

相关文章:

JavaScript 检查给定数字中哪一个与其他数字不同

c++ - 使用具有指向派生类对象的指针的基类指针数组调用派生类方法

c - 强制两个结构在编译时具有相同的大小?

c - OpenMP 和共享结构和指针

c - 函数总是分配到相同的地址,并且变量不会改变

function - Azure 函数中的报告查看器 DLL 加载问题

c - 如何对空指针进行算术运算

c - c语言中strstr通过指针

c - 将单词插入堆栈并检查其是否存在回文

使用 strcat 和 realloc 的串联产生意外错误