问题描述:
main()
{int i,k;
i=3;
k=(i++)+(i++)+(i++);
printf(“%d\n”,k);
}
程序的运行结果是什么?请具体讲解一下可以吗?
如果让k=(++i)+(++i)+(++i)呢?
是学生给我提出的问题……
问题解答:
这是个经典的找抽题目。和编译器有关,你的学生自己肯定知道答案,只是找你确认一下,你只需要找几个不同的编译系统,分别执行这条语句,然后得出不同的结果,最后告诉他这样的句子很危险,不要写
i++,在函数中用i的值,用完后i加1
++i,在函数中先给i加1,然后在用加1后的值
k=(i++)+(i++)+(i++); k = 3 +4 +5 = 12
k=(++i)+(++i)+(++i) = 4 + 5 + 6 = 15
学这些东西很无聊,在不同的系统里面结果是不同的,只有神经病才在程序里面这么写。
答案是9
原因很简单因为是后加,所以先做i的连续加,将加的结果赋值给k,之后i的值自增3.