为何数据压入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
相关产品推荐
相关产品推荐

