gpt4 book ai didi

c - C中的函数压入栈

转载 作者:太空宇宙 更新时间:2023-11-04 07:53:59 25 4
gpt4 key购买 nike

在我的测试函数中,我试图将两个值压入堆栈。它在 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/

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