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
如何解释以上两个程序?

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-12-20
后置递增递减运算符,将操作数递增或递减1,再将操作数的原值返回,也就是说有一个临时变量用来存放原来的值,在完成递增或递减操作后,将临时变量返回。
前置和后置区别就在这,前置返回的是新值,后置返回的是旧值。
第2个回答  2019-12-20
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语言中自增自减运算符的运算次序?
++i,--i表示是使用之前先自增或者自减1;i++,i--表示是使用之后自增或者自减1;main(){int i=1;i++,++i; \/\/这一条执行完i=1+1+1=3 printf("%d%d",i++,--i); \/\/ 这里是自右往左的顺序i的值先是-1=2,然后i再+1=3,相当于printf("%d%d",2,3);} ...

C语言运算符的优先级
5、C语言运算符优先级顺序如下所示:自增运算符++和自减运算符--,在作后缀运算符(如表达式x++)时,较其用作前缀运算符(如表达式++x)时,具有较高的优先级。6、各种运算符间的优先级数值运算符、字符串运算符、关系运算符、逻辑运算符。可以用括号改变优先级顺序,使得括号内的运算优先于括号外...

c语言中算术运算符有哪些其中除号与求余运算符的运算特点有哪些_百度知 ...
C语言中算术运算符有加+、减-、乘?、除\/、求余%或称取模运算、自增运算++、自减运算--共七种。按照参与运算的运算数的个数,可以将算术运算符分为单目运算符和双目运算符。如果按优先级次序的话,自增自减运算为第二级,然后进行乘除求余,是第三级,后进行加减第四级。除号\/运算如果两边操作...

c语言运算符序依次为?
结论是:C语言中的运算符按照从高到低的优先级顺序排列,从数值运算符开始,递减到逗号操作符的最低优先级。运算符的结合次序遵循"从高到低"的原则,即优先级高的运算符先结合,低优先级的后结合。同一行中运算符的优先级相同,不同类型的运算符,如数值、字符串、关系和逻辑运算符,各自有特定的优...

c语言先算+还是*
++自增运算符++变量名\/变量名++单目运算符 --自减运算符--变量名\/变量名--单目运算符 取值运算符*指针变量单目运算符 &取地址运算符&变量名单目运算符 !逻辑非运算符!表达式单目运算符 ~按位取反运算符~表达式单目运算符 sizeof长度运算符sizeof(表达式)3\/除表达式\/表达式左到右双目运算符 乘...

c语言运算符的优先级顺序
c语言运算符优先级从高到低的顺序依次如下:优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。不同类型的运算符之间也有相应的优先级...

运算符中优先级最低的是
c语言运算符中优先级最低的是:第15级。1、算术运算符、关系运算符 算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(\/)、求余(或称模运算,%)、自增(++)、自减(--)共七种;关系运算符:用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、...

自增自减运算的优先级是怎样的?
自增、自减运算符及负号运算符的结合方向是从右向左。因此,上式等效于k=-(i++);若i=5,则表达式k=-i++运算之后k的值为-5,i的值为6。此赋值表达式的值即为所赋的值-5。不要因为k=-i++等效于k=-(i++)就先做“++”运算!这里采用的是“先用后变”,即先拿出i的值做负号“-”...

C语言中算术运算符优先级的问题
C语言中算术运算符优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优先级低的运算符后结合,同一行中的运算符的优先级相同。基本的优先级:1、指针最优,单目运算优于双目运算。2、先运算...

算术运算符,文本运算符,引用运算符和比较运算符优先级?
自增运算符 ++变量名\/变量名++ -- 自减运算符 --变量名\/变量名-- 取值运算符 指针变量 & 取地址运算符 &变量名 !逻辑非运算符 !表达式 (类型)强制类型转换 (数据类型)表达式 -- sizeof 长度运算符 sizeof(表达式)-- 3 \/ 除 表达式\/表达式 左到右 双目运算符 乘 表达式*表达式 余数(取...

相似回答