0

可能重复:
谁能解释这些未定义的行为(i = i++ + ++i,i = i++ 等……)

关于增量运算符,我遇到了一个奇怪的问题。

我在 PHP 和 C 中得到相同表达式的不同输出。

In C language

main()
{
    int i = 5;
    printf("%d", i++*i++); // output 25;
}

In PHP

$i = 5;
echo $i++*$i++; // output 30

谁能解释这种奇怪的行为?谢谢。

4

4 回答 4

3

在 C 中,结果是未定义的,因为两个操作数中的任何一个都可以先求值,因此第二次读取它是错误的。

而且,在 PHP 中,如果结果是 42 等待对 php.ini 进行一些更改,我不会感到惊讶。

于 2012-09-11T12:45:28.020 回答
1

在这种风格中使用时,的行为++是未定义的,因为您不确切知道++操作何时发生以及值何时从x++.

于 2012-09-11T12:45:28.080 回答
0

这是一个优先事项。看看http://php.net/manual/en/language.operators.precedence.php

于 2012-09-11T12:44:53.240 回答
0

这是未定义的行为,因为当作为函数参数传递时,i++++i--ii--不按任何特定顺序递增/递减。

不仅如此,如果我没记错的话,我相信这printf("%d", i++*i++);只是输出5*5然后增加i两次。

记住++i操作前的增量,操作i++后的增量。考虑这段代码:

int i, x = 5;

int i = x++;   // i is now equal to 5 and x is equal to 6 because the increment happened after the = operation.
x = 5;         //set x back to 5
i = ++x;       //i is now equal to 6 and x is equal to 6 because the increment happened before the = operation.

情况就是这样,C但我不能保证PHP

于 2012-09-11T12:52:18.617 回答