首页 文章

通过堆栈推送传递指针引用

提问于
浏览
0

我正在尝试创建的堆栈的节点定义:

typedef struct node {
double value;
struct node *prev;
} node_t;

主要:

node_t *stack = NULL;
push(stack, new_node(strtod(token, NULL)));

关于new_node函数的注意事项 - 使用token =“1”,new_node返回一个结构节点* prev等于NULL(根据需要)的节点,其中double值为1(根据需要)

void push(node_t *stack, node_t node) {
    if(stack != NULL) {
        node_t temp;
        temp = stack[0];
        stack = &node;
        node.prev = &temp;
    }
    else {
        stack = &node;
    }
}

当我修改堆栈时,我希望堆栈也可以在main中修改;然而,这种情况并非如此 . 在main中,在调用push()之后,堆栈保持为NULL .

1 回答

  • 2

    问题出在这里:

    node_t *stack = NULL;
    push(stack, new_node(strtod(token, NULL)));
    

    您创建一个指针,将它 by value 传递给一个函数,然后期望它随后被更改 . 但是C不能那样工作 - 通过值传递的变量不会在调用上下文中修改 . 你需要传递一个指针(指针):

    node_t *stack = NULL;
    push(&stack, new_node(strtod(token, NULL)));
    

    然后:

    void push(node_t **stack, node_t node) {
        if(*stack != NULL) {
            node_t temp;
            temp = (*stack)[0];
            *stack = &node;
            node.prev = &temp;
        }
        else {
            *stack = &node;
        }
    }
    

    现在更改将在外部可见,因为您使用双指针来修改指针 .

相关问题