gpt4 book ai didi

c - 为堆栈编写 C 弹出函数

转载 作者:行者123 更新时间:2023-11-30 19:37:57 25 4
gpt4 key购买 nike

嘿,我正在编写一个堆栈函数,但在从堆栈顶部弹出值时遇到问题。我的推送功能似乎可以正常工作。这是我的推送和弹出代码。

void push(int num, int ** sp)
{
if (++(*sp) == NULL)
printf("Stack Overflow");
else{
printf("sp for push = %p \n", *sp);
**sp++ = num;
}
}
int pop(int **sp)
{
printf("sp for pop = %p\n", *sp);
num = (**sp)--;
printf("sp = %d\n",num);
printf("sp for pop = %p\n", *sp);

return num;
}

我在检查 null 条件以防止弹出甚至不在堆栈上的元素时也遇到了麻烦,但一次出现一个问题。

无论如何,当我先按 15 再按 5 时,函数的输出如下所示

sp for push = 0x1761014 
sp for push = 0x1761018
sp for pop = 0x1761018
sp = 5
sp for pop = 0x1761018
5

其中 sp 是堆栈指针。注意堆栈指针如何按 sizeof int 递增。我通过引用传递两个指针,因此它们也应该更改它们指向的内存中的位置,但是对于 pop 函数,当我后递减指针时,由于某种原因,值不会改变。有人可以帮我解释一下吗?如有任何帮助,我们将不胜感激。

最佳答案

基本错误,我需要更改指向数据的指针的地址,而不是指向指针的指针。新代码是:

int pop(int **sp)
{
printf("sp for pop = %p\n", *sp);
num = (**sp);
(*sp)--;
printf("sp = %d\n",num);
printf("sp for pop = %p\n", *sp);

return num;
}

关于c - 为堆栈编写 C 弹出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38944456/

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