You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言栈pop函数用stack[*top--]不生效、(*top--)生效的原因是什么?

核心原因:C语言运算符优先级差异

首先明确C语言中相关运算符的优先级规则:

  • 后缀自减运算符--的优先级 高于 解引用运算符*
  • 括号()的优先级高于所有运算符

两种写法的实际执行逻辑差异

  1. 错误写法:stack[*top--]
    按照优先级规则,会被编译器解析为stack[*(top--)],执行逻辑是:
  • 先拿到指针变量top的当前地址值(是指针本身的存储地址,不是它指向的内容)
  • 对该地址做解引用,得到当前main函数中top变量的值,作为数组下标访问stack
  • 最后对指针变量top本身做自减操作,让它指向内存中前一个int地址,完全没有修改它原本指向的main函数里的top变量的值
    这就是main里的top没有被正确递减的原因:你修改的是pop函数里的局部指针变量本身,不是它指向的目标值。
  1. 正确写法:stack[(*top)--]
    括号强制提升了解引用的优先级,执行逻辑是:
  • 先对指针top做解引用,得到main函数中top变量的可修改左值
  • 以这个top变量的当前值作为数组下标访问stack
  • 最后对*top指针指向的目标值(也就是main里的top变量)*做后缀自减,正确完成栈顶指针的递减操作

额外优化提示

你当前pop函数参数里的item是无用参数,没有任何地方用到,可以直接删掉。

内容的提问来源于stack exchange,提问作者Chiranjit Debnath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 00:15:00