这是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);
}
}
Run Code Online (Sandbox Code Playgroud)
我没有机会,我也发布了这个show()功能:
void show_stack(int newstack[], int *top)
{
int i;
printf("\n");
for(i=0;i<=*top;i++)
printf("%d",newstack[i]);
}
Run Code Online (Sandbox Code Playgroud)
我猜show函数没有错误.
该*提领/间接操作符比优先级低--后缀减量操作.你的陈述
*newtop--;
Run Code Online (Sandbox Code Playgroud)
将被解析为
*(newtop--);
Run Code Online (Sandbox Code Playgroud)
而且,由于值newtop--是当前值的newtop,语句实现精确一无所获.它取消引用newtop,并且对取消引用的值没有任何作用.
你真的想要这样的东西:
*newtop = *newtop - 1;
Run Code Online (Sandbox Code Playgroud)
要么
(*newtop)--;
Run Code Online (Sandbox Code Playgroud)
有关表达式的详细信息,请参阅此答案*newtop--.