可能重复:
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
任何人都可以解释这种奇怪的行为吗?感谢。
答案 0 :(得分:3)
在C中,结果是未定义的,因为可以首先评估两个操作数中的任何一个,因此第二次读取它是错误的。
而且,在PHP中,如果结果是42等待对php.ini进行一些更改,我不会感到惊讶。
答案 1 :(得分:1)
在此样式中使用时++
的行为未定义,因为您不确切知道++
操作何时发生以及何时从{{1}“返回”值}。
答案 2 :(得分:0)
答案 3 :(得分:0)
这是未定义的行为,因为i++
或++i
或--i
或i--
在作为函数参数传递时不以任何特定顺序递增/递减。
不仅如此,如果我没有弄错,我相信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
。