printf输出顺序问题与i++、++i
printf()
今天遇到类似这样一道编程题:
#include<stdio.h>
int main()
{
int i = 0;
printf("++i,++i,++i,++i,++i,++i = ");
printf("%d %d %d %d %d %d\n",++i,++i,++i,++i,++i,++i);
i=0;
printf("i++,i++,i++,i++,i++,i++ = ");
printf("%d %d %d %d %d %d\n",i++,i++,i++,i++,i++,i++);
i=0;
printf("i++,i++,i++,++i,++i,++i = ");
printf("%d %d %d %d %d %d \n",i++,i++,i++,++i,++i,++i);
i=0;
printf("++i,++i,++i,i++,i++,i++ = ");
printf("%d %d %d %d %d %d\n",++i,++i,++i,i++,i++,i++);
i=0;
printf("++i,++i,i,i,i++,i++ = ");
printf("%d %d %d %d %d %d\n",++i,++i,i,i,i++,i++);
}
输出结果:
编程环境是:VS2010、win10
总结一下:
printf()从右往左输出;
如果输出为 i++,则输出当前 i 后立马赋值 i = i + 1;否则输出位置为 ++i 或者 i 时,先进行完所有运算再输出 i 的最终值。
" = "与i++、++i
#include<stdio.h>
int main()
{
int i;
int num;
i=0;
num=(i++)+(i++)+(i++)+(i++)+(i++);
printf("num = (i++)+(i++)+(i++)+(i++)+(i++) = %d\n",num);//0+0+0+0
i=0;
num = (++i)+(++i)+(++i)+(++i)+(++i);
printf("num = (++i)+(++i)+(++i)+(++i)+(++i) = %d\n",num); //5+5+5+5+5
i=0;
num = (++i)+(++i)+(i++)+(i++)+(i++);
printf("num = (++i)+(++i)+(i++)+(i++)+(i++) = %d\n",num); // 5+5+0+0+0
i=0;
num = (++i)+(++i)+(++i)+(i)+(i++);
printf("num = (++i)+(++i)+(++i)+(i)+(i++) = %d\n",num); //5+5+5+0+0
}
对于等式来说,是先对 i 和 i++ 中的 i 赋值,再最后对 ++i 中的 i 赋值,然后运算。
(20220716更新)
评论区提醒和编译器有关;
补充一张在Ubuntu上的运行结果;