我正在尝试创建的堆栈的节点定义:
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。
答案 0 :(得分:2)
问题在于:
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;
}
}
现在更改将在外部可见,因为您使用双指针修改指针。