【发布时间】:2019-01-21 11:20:29
【问题描述】:
在我的测试函数中,我试图将两个值推入我的堆栈。它在 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
}
【问题讨论】:
-
简单地说:除非您打算通过该参数返回一个指针,否则不要使用指针到指针。而且没有真正的理由需要传递
StackNode**。如果您将所有分配和硬拷贝都放在堆栈 ADT 中并且根本不向调用者公开任何内部结构会更好。
标签: c function pointers stack push