元素没有被弹出

时间:2013-09-12 08:33:20

标签: c stack

这是pop()函数,我写的是弹出一个堆栈的元素。到目前为止,我已成功将元素推入堆栈并显示堆栈。所以,我想我的pop()函数在某处出错了。这是我的pop函数:

void pop(int newstack[], int *newtop, int bound )
{
    int item;
    if(*newtop<0)
        printf("\n CAUTION!!! UNDERFLOW");
    else
    {
        item=newstack[*newtop];
        *newtop--;
        printf("\n Element popped->%d",item);
    }
}

没有机会,我也发布了show()功能:

void show_stack(int newstack[], int *top)
{
    int i;
    printf("\n");
    for(i=0;i<=*top;i++)
        printf("%d",newstack[i]);
}     

我猜show函数没有错误。

2 个答案:

答案 0 :(得分:5)

*取消引用/间接运算符的优先级低于--后缀减量运算符。你的陈述

*newtop--;

将被解析为

*(newtop--);

由于newtop--的值是newtop当前值,因此该语句完全没有实现。它取消引用newtop,并且对解除引用的值没有任何作用。

你真的想要这样的东西:

*newtop = *newtop - 1;

(*newtop)--;

有关*newtop--等表达式的详细信息,请参阅this answer

答案 1 :(得分:2)

*newtop--;可能是错误的

使用:

(*newtop)--;

请参阅this