You need to enable JavaScript to run this app. 为何数据压入STACK后值发生变化?后缀表达式代码输出异常排查
优惠活动
大模型
产品
解决方案
定价
更多

为何数据压入STACK后值发生变化?后缀表达式代码输出异常排查

后缀表达式栈值错误的问题修复

核心问题根源

你观察到的「压入栈后数值从243变成-13」的现象,完全是push函数的形参类型错误导致的:

  • 你定义的push函数形参是char类型,绝大多数编译器下有符号char的取值范围为-128 ~ 127
  • 传入的tmp是int类型的计算结果,当tmp值(比如243)超出char范围时,会被强制截断为char的低位字节:243的二进制补码截取8位就是0xF3,对应有符号char的值正好是-13,和你的调试结果完全匹配
  • 后续所有大于127的计算结果都会被截断,最终输出错误值-39就是多次截断累积的结果

具体修改点

  • 把push函数的形参从char c改为int val,函数内部赋值逻辑对应修改:
void push(int val) {
    STACK[Sp++] = val;
}
  • 可选优化:pop函数里给栈位置赋值NULL的写法不规范,NULL是指针类型空值,给int类型栈元素赋值建议替换为STACK[Sp] = 0;,避免不必要的类型隐式转换

修复后验证

你的测试用例输入11、表达式3 3 * 3 * 3 * 3 * 3 *(共6个3相乘,结果为729),修改后即可输出正确结果。

内容的提问来源于stack exchange,提问作者jijel Kim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 02:15:04