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
如何解释以上两个程序?
前置和后置区别就在这,前置返回的是新值,后置返回的是旧值。 参考技术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语言中自增自减运算符的运算次序?的主要内容,如果未能解决你的问题,请参考以下文章