-3

答案是 45。我不明白这东西是如何工作的。

main()
{
    int a =10;
    int i =  a++ + ++a + a++ + ++a;
    printf("%d , %d ", i,a);

}
4

1 回答 1

3

实际上输出是一个undefined behavior很好的。

来自 C99 标准的是 6.5 表达式,§2

在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的评估修改一次。此外,应仅读取先验值以确定要存储的值。

操作数的求值顺序未指定。如果尝试修改赋值运算符的结果或在下一个序列点之后访问它,则行为未定义。

于 2013-08-29T15:43:02.700 回答