问题及代码:
/*实例2:递增递减操作符*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i=10,j;
system("cls"); //原题用clrscr(),但其不是标准函数,无法调用
j=i++; //i赋值给j后,i自增1
printf("%d\t%d\n",i,j); //i==11,j==10
i=++j; //j自增1,再赋值给i
printf("%d\t%d\n",i,j);//i==j==11
printf("%d\n",++i); //将i加1后输出,即i==12
printf("%d\n",--i); //将i减1后输出,即i==11
printf("%d\n",i++); //将i输出后加1,输出11,i==12
printf("%d\n",i--); //将i输出后减1,输出12,i==11
j=-i++;
printf("%d\t%d\n",i,j);
//i取负值,赋值给j,i自增1 i==12;j==-11;
j=-i--;
printf("%d\t%d\n",i,j); // i==11,j==-12;
printf("%d\t%d\t%d\n",i,i--,i--); // 输出为9 10 11 因为自增自减为单目运算符,具有右结合性(i--得到11后自减1,得10后再自减1,得出9)
getchar();
return 0;
}
总结:
单目运算符的右结合性