浅谈C语言忠自增表达式本身的值

  今天在学习C语言的时候,遇到这么一个问题。我们都知道自增表达式a++,a--与++a和--a。当定义一个变量b,使其等于自增表达式的时候,两种自增表达式最后赋给b的结果都是不一样的。

b=a++,此时b的值为a;而b=++a,此时b的值为(a+1)。

  我一开始对于这两种表达式最后b的结果是存疑的。因为自增运算的优先级大于赋值运算,而我一开始认为这两种b的结果是因为一个是a为自增运算的左值,一个是自增运算的右值,所以导致b最后的结果不一样。后来在反复思考左值和右值的定义之后,越想越想不通。最后在与自己的专业课老师交流了之后,才知道b的值是自增表达式本身的值。

  当自增运算符为后缀的时候,表达式本身的值为a;而当自增运算符为前缀的时候,表达式是本身的值为(a+1),即运算的结果。所以导致b的值最后是不一样的。

  第一次写学习博客,如果有不对的地方,请各位dl指正,谢谢!

#include <stdio.h>
int main()
{
	int a = 1;
	int b;
	b = (a++);
	printf("%d\n", b);
	a = 1;
	b = (++a);
	printf("%d\n", b);
	return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言表达式一般采用栈来实现,具体步骤如下: 1. 定义一个操作数栈和一个操作符栈。 2. 从左到右依次扫描表达式的每个元素,如果是数字则将其压入操作数栈,如果是操作符则比较其与操作符栈栈顶元素的优先级。 3. 如果该操作符优先级高于栈顶操作符,则将该操作符压入操作符栈。 4. 否则,将操作符栈栈顶元素弹出,从操作数栈弹出两个数字,进行计算并将结果压入操作数栈,直到该操作符可以入栈。 5. 如果扫描完整个表达式后,操作符栈不为空,则将操作符栈的操作符依次弹出,从操作数栈弹出两个数字进行计算并将结果压入操作数栈。 6. 最终操作数栈剩下的数字即为表达式。 例如,对于表达式 "2 + 3 * 4 - 5",按照上述步骤可以得到如下计算过程: 1. 将2压入操作数栈。 2. 将"+"压入操作符栈。 3. 将3压入操作数栈。 4. 将"*"与操作符栈栈顶元素"+"比较,"*"的优先级高,将"*"压入操作符栈。 5. 将4压入操作数栈。 6. 将"-"与操作符栈栈顶元素"*"比较,"-"的优先级低,将"*"弹出,从操作数栈弹出4和3进行计算得到12,将12压入操作数栈。 7. 将"-"压入操作符栈。 8. 将5压入操作数栈。 9. 扫描完整个表达式后,操作符栈剩余"-",将"*"弹出,从操作数栈弹出12和2进行计算得到24,将24压入操作数栈,将"-"弹出,从操作数栈弹出24和5进行计算得到19,最终操作数栈剩下的数字19即为表达式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值