c语言中条件判断表达式中出现自增自减符时的运算顺序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言中条件判断表达式中出现自增自减符时的运算顺序相关的知识,希望对你有一定的参考价值。

自增自减,按照自增自减在前面还是后面
如果在前面就是先自变,然后运算。
如果在后面,就是先运算 再自变
没什么运算顺序可言的。
需要注意短路运算(不知道的话自己查哈。)
参考技术A 自左到右,,,,

c语言中自增自减运算符的运算次序?

#include<stdio.h>
main()
int a=5,b=5,c,d;
a=a++;
b=++b;
printf("a=%d,b=%d\n",a,b);
c=a++;
d=++b;
printf("c=%d,d=%d\n",c,d);

运行结果:
a=5,b=6
c=5,d=7
为什么a和c不是6?

a=a++;

b=++b;

如下图红框中所示(gcc编译时告警),上述两种用法对编译器来说是无定义的,即是说C语言标准中没有规定该怎么处理,因为实践过程中也没人这么用。

既然没有标准,又不能说是语法错误,那就依赖编译器实现。A编译器实现可以让a = 5,B编译器实现也可以让a = 6。因此,在实际项目中,不要写这样的语句。

追问

#include
main()
int x=3,y=5;
printf("%d,%d\n",(x--,--y),x++);

结果:4,3
#include
main()
int a=3;
printf("%d,%d\n",a,(a-=a*a));

结果:-6,-6
如何解释以上两个程序?

参考技术A 后置递增递减运算符,将操作数递增或递减1,再将操作数的原值返回,也就是说有一个临时变量用来存放原来的值,在完成递增或递减操作后,将临时变量返回。
前置和后置区别就在这,前置返回的是新值,后置返回的是旧值。
参考技术B i++是先使用i的值,再对i进行加1操作.
所以在p=(i++)+(i++)+(i++)里面在计算p的值之前,i本身的值总是5.
所以p的值就是3个5所以是15.在运算完p之后,因为有3个i++,所以i做了3次自加运算,所以i最终是8.
q的变化同理.
所以最终打印结果是 15,15,8,8

以上是关于c语言中条件判断表达式中出现自增自减符时的运算顺序的主要内容,如果未能解决你的问题,请参考以下文章

python 为什么没有自增自减符

c语言中自增自减运算符的运算次序?

c语言中自增自减运算符的运算次序?

自增、自减运算符的使用?

python自增自减?赋值语句返回值?逗号表达式?

c语言中条件运算 结合方向 从右到左 啥意思