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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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语言中自增自减运算符的运算次序?的主要内容,如果未能解决你的问题,请参考以下文章

在C语言中自增自减运算符有啥作用?

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

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

C语言 指针自增自减&加减运算 p++ p+i

自增自减运算符重载

JAVA自增自减运算符,i++,++i