PHP和C语言中的递增运算符

时间:2012-09-11 12:43:27

标签: php c math increment

  

可能重复:
  Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)

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

我在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 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

在此样式中使用时++的行为未定义,因为您不确切知道++操作何时发生以及何时从{{1}“返回”值}。

答案 2 :(得分:0)

答案 3 :(得分: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