#include <stdio.h>
int main()
{
int integar = 0;
int temp;
temp = integar++;
printf("temp = %d\n",temp);
printf("integar = %d\n",integar);
return 0;
}
执行结果:
疑问:
++ 的运算符优先级要高于 =
但是为什么先执行
temp = integar
后执行
integar++
呢?
“
++i是先操作后赋值(j=++i;那么i=i+1,j=i)
i++是先赋值后操作(j=i++;那么j=i,i=i+1)
”
这个我也知道的
能解释下原因吗?
比如说从运算符优先级的角度说一下。。。
多谢!
这是++i和i++的区别:
相同点:二者都相当于i=i+1;
区别:
++i是先操作后赋值(j=++i;那么i=i+1,j=i)
i++是先赋值后操作(j=i++;那么j=i,i=i+1)
这个我也知道的
能解释下原因吗?
比如说从运算符优先级的角度说一下。。。
多谢!
@WizardCT: 从运算符的优先级角度说我还真说不清,不过你可以看看反编译的过程。
int i = 10;
int j;
j=i++;
的反编译代码为
IL_0001: ldc.i4.s 10
IL_0003: stloc.0
IL_0004: ldloc.0
IL_0005: dup
IL_0006: ldc.i4.1
IL_0007: add
IL_0008: stloc.0
IL_0009: stloc.1
这个是先执行dup,后执行add
int i = 10;
int j;
j = ++i;
的反编译代码为
IL_0001: ldc.i4.s 10
IL_0003: stloc.0
IL_0004: ldloc.0
IL_0005: ldc.i4.1
IL_0006: add
IL_0007: dup
IL_0008: stloc.0
IL_0009: stloc.1
这个是先执行add后执行dup
#include <stdio.h>
int main()
{
int integar = 0;
int temp;
temp = ++integar;
printf("temp = %d\n",temp);
printf("integar = %d\n",integar);
return 0;
}
这样写就好了
前置++,后置++,规定的逻辑算法就是这样的
++i或者i++ 都影响 i这个变量,
但是如果 赋值操作的话,情况就变了:
int i=1;
s=++i;//S=2,i=2
int i=1;
s=i++;//S=1,i=2
你这个代码是没有什么歧义性的,具体原因这是语言的语法规定,所以真没什么好解释的,去看看讲c、c++的教材就可以了。
一堆废话!
少在这不懂装懂
优先级(和结合性)与执行次序是两回事。
temp = integar++ 这个表达式的含义是(根据优先级)
temp = (integar++)
它说明的是++的运算对象是integar,以及把(integar++)这个表达式的值赋给temp。
表达式(integar++)的值就是integar (0),且++运算要求在求得这个值之后产生一个副效应(integar变为1)【求完这个值之后至“;”之前完成这个加1】
因此temp被赋值为0,在“;”之后查看integar的值会发现其值为1.