关于增量运算符,我遇到了一个奇怪的问题。
我在 PHP 和 C 中得到相同表达式的不同输出。
In C language
main()
{
int i = 5;
printf("%d", i++*i++); // output 25;
}
In PHP
$i = 5;
echo $i++*$i++; // output 30
谁能解释这种奇怪的行为?谢谢。
关于增量运算符,我遇到了一个奇怪的问题。
我在 PHP 和 C 中得到相同表达式的不同输出。
In C language
main()
{
int i = 5;
printf("%d", i++*i++); // output 25;
}
In PHP
$i = 5;
echo $i++*$i++; // output 30
谁能解释这种奇怪的行为?谢谢。
在 C 中,结果是未定义的,因为两个操作数中的任何一个都可以先求值,因此第二次读取它是错误的。
而且,在 PHP 中,如果结果是 42 等待对 php.ini 进行一些更改,我不会感到惊讶。
在这种风格中使用时,的行为++
是未定义的,因为您不确切知道++
操作何时发生以及值何时从x++
.
这是未定义的行为,因为当作为函数参数传递时,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
。