gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:13:57 24 4
gpt4 key购买 nike

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

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 返回一个节点,其中 struct 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。

最佳答案

问题出在这里:

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

您创建了一个指针,将其按值 传递给一个函数,然后期望它随后会被更改。但是 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;
}
}

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

关于c - 通过堆栈推送的指针引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36962259/

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