#include
int main(){
int i=1;
while(i<=5){
printf("%d^2=%d\n",i, (i++)*(i++));
}
return 0;
}
运行结果:
3^2=2
5^2=12
7^2=30
程序中printf("%d^2=%d\n",i, (i++)*(i++));中第一个i为什么显示是i++后的值
我认为结果应该是:
1^2=2
3^2=12
5^2=30
这跟IDE有关,不同IDE执行顺序会不同,所以正式编程应该避免这种写法,不要在print里写运算
在dev里,printf函数会先从右到左依次运算每个表达式,得到的值缓存起来,然后再从左到右的将值依次传递进格式化字符串里输出
这个跟编译器有关。有的编译器不是这种逻辑
一般是这样的,前面有一个类似的问题
(i++)x(i++) 是可以写成 a1xa2 是一个完整的运算,一个完整的运算是指两个操作数和操作符。
一个完整的操作数完成后就会执行 i++的操作,这里就是a1*a2完成后,就会执行++运算。
可以写代码验证一下
可以参考下这个问题 https://ask.csdn.net/questions/7801734