vc i自加问题

发布时间:2024-05-16 10:21 发布:上海旅游网

问题描述:

int main()
{
int i=1;
while (i<=10)
{
printf("%d\n",(i++)*(i++));
}
return 0;
}
为什么结果是1,9,25,49,81?
就算是从右到左执行,在(i++)*(i++)中,(i++)为1,而i为2对吧,而左边中的(i++)为2,i为3吧,那第一次的结果也应该是2才对呀?

问题解答:

在同一个语句内使用超过两条自增语句,这个是编译器相关的东西,强烈建议不要这样编写代码。
运算顺序是编译器说了算的,不同的编译器可能有不同的结果。

c++ c 这个执行顺序是

从右到左

从括号到括号外

不管什么事先把括号先走完...然后i得到两次相加 [反正你从右往左看]

如果你改成 printf("i=%d %d\n",i++,(i++)*(i++));
那i还会再向上加一次...慢慢体会... 这是编译器的执行顺序

你自己数几个++
原始值为1 再去数你的++你就知道了

在同一个语句内使用超过两条自增语句,这个是编译器相关的东西,强烈建议不要这样编写代码。

这种程序可读性太差,风格不好

热点新闻