下面说说我的理解,希望大家多多指正。
运算结果与编译器有关,在vc6.0中,自增自减的运行步骤是不一样的:
++i:先自增,再使用;
i++:先使用再自增,Vc中要在整条语句使用完了再自增!!!
1.
#include<stdio.h>
main()
{
int i=1,z;
z=--i||i++;
printf("%d
%d",z,i);
}
输出结果:0,1.
说明:=--i||i++从左到右执行,--i=0,i=0;i++=0,i=1;
2.
#include<stdio.h>
main()
{
int i=1,z;
z=i--||i++;
printf("%d
%d",z,i);
}
输出结果:1,0.
说明:i--||i++从左到右执行,i--=1,所有z=1,后部分i++不执行,i=0.
3.#include<stdio.h>
main()
{
int i=1;
printf("%d
%d",++i,i++);
}
输出结果:3,1.
说明:printf函数执行顺序为从右到左,先执行i++,输出1,i=2;再执行++i=3,i=3.
4.(这道别人在论坛已经问过,但我还是不理解)
#include<stdio.h>
main()
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d
%d
%d
%d",p,i,q,j);
}
输出结果:15,8,22,8
说明:vc中i++先使用,最后整条语句运行完了之后自增;
++i先自增然后使用。
所以:p=(i++)+(i++)+(i++)=5+5+5=15,语句运行之后自增,i=8;
q值为什么为22,我也不懂,我认为q=6+7+8=21???