在我的测试函数中,我试图将两个值压入堆栈。它在 main() 中运行良好,但我认为在使用 testfunc() 时我弄乱了指针?
值到达 push() 函数,但这些值根本没有出现在我的堆栈中。
在此先感谢您的帮助
struct StackNode
{
unsigned int data;
struct StackNode* next;
};
struct StackNode* newNode(unsigned int data)
{
struct StackNode* stackNode =
(struct StackNode*) malloc(sizeof(struct StackNode));
stackNode->data = data;
stackNode->next = NULL;
return stackNode;
}
int isEmpty(struct StackNode *root)
{
return !root;
}
void push(struct StackNode** root, unsigned int data)
{
struct StackNode* stackNode = newNode(data);
stackNode->next = *root;
*root = stackNode;
printf("%u pushed to stack\n", data);
}
void pop(struct StackNode** root)
{
if (isEmpty(*root))
printf("ERROR");
struct StackNode* temp = *root;
*root = (*root)->next;
free(temp);
}
unsigned int peek(struct StackNode* root)
{
if (isEmpty(root))
return -2;
return root->data;
}
void testfunc(struct StackNode* root, unsigned int a, unsigned int b)
{
struct StackNode *r=root;
push(&r, a);
push(&r, b);
}
主要
int main()
{
struct StackNode* root = NULL;
push(&root,0); // Works well and pushes "0" to the stack.
testfunc(root,12,15); // <-- doesn't push any value in the stack
}
最佳答案
您的 push
函数修改根:
*root = stackNode;
在您的 testfunc
中,此更改是针对函数本地的 root
变量完成的。 IE。对它的任何更改在调用函数 (main
) 中都是不可见的。所以,从 main
的角度来看,好像什么都没有改变,因为那里的 root
变量没有改变。
要确保 testfunc
中对 root
的更改在 main
中也可见,您可以例如。返回它:
struct StackNode* testfunc(struct StackNode* root, unsigned int a, unsigned int b)
{
push(&root, a);
push(&root, b);
return root;
}
root = testfunc(root, 12, 15);
或者,您可以:
void testfunc(struct StackNode** root, unsigned int a, unsigned int b)
{
push(root, a);
push(root, b);
}
testfunc(&root, 12, 15);
关于c - C中的函数压入栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51844161/