1

这是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]);
}     

我想显示功能没有错误。

4

2 回答 2

5

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

*newtop--;

将被解析为

*(newtop--);

并且由于 的​​值newtop--是 的当前值newtop因此该语句完全没有实现任何目标。它取消引用newtop,并且对取消引用的值不做任何事情。

你实际上想要这样的东西:

*newtop = *newtop - 1;

或者

(*newtop)--;

有关表达式的详细信息,请参阅此答案*newtop--

于 2013-09-12T08:41:56.153 回答
2

*newtop--;可能是错的

利用:

(*newtop)--;

看到这个

于 2013-09-12T08:37:04.327 回答