我在vc6·0上编写了一下 这是截图
首先是前两个7 因为i++是先赋值在进行加一运算,++i是先加一然后再进行赋值操作,所以a,b中储存着值是7,此时i的值是8
然后是后面两个7,同理 a为7,b为7,此时i为6
同理,-i++中因为++在后面 所以先输出-6,然后在把i加一 这是i变成了7
最后 根据输出格式 输出了 i=7;
前缀加/减 与 后缀加/减 的不同 -- 在于表达式 里 的 值。
表达式 里, 前缀加 要先自增, 后使用。
表达式 里, 前缀减 要先自减, 后使用。
表达式 里, 后缀加 要先使用原值。出了表达式后 再自增。
表达式 里, 后缀减 要先使用原值。出了表达式后 再自减。
a=++i; 前缀加 要先自增, 后使用。执行: i=i+1; a=i ; ( i=7; a=7;)
b=i++; 后缀加 要先使用原值。出了表达式后 再自增。执行 b=i; i++; (b=7;i=8)
a=--i; 前缀减 要先自减, 后使用。i=i-1; a=i; (i=7;a=7)
b=i--; 后缀减 要先使用原值,执行. b=i.i=i-1; (b=7; i=6)
printf("%d\n",-i++); 后缀加 要先使用原值。出了表达式后 再自增. 打印 -i; (-6) 出了表达式 i=i+1;(i=7)
printf("i=%d\n",i); 打印 i=7
第一行 i为6 a和b是垃圾值。
第二行a赋予i自增以后的副本a,a为7,而i为7,b被赋给i的副本,b为7,然后i又自增,i为8
打印出来a就是7 b是7 这个时候i是为8的
然后a被赋予i自减以后的副本,就是7,而i这时候为7,b又被赋予i的副本为7,然后i又自减为6。
再次打印,a为7,b为7,这时候i为6
下面根据优先级i++先算,那么,i++表达式的值为i的副本,那么就是6,然后负号表达式就是-6。这个-6传给printf,打印出-6,同时i也自减了,这个时候i为5。
再次打印,i为5。