インクリメント演算子に関して奇妙な問題に遭遇しました。
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 では、2 つのオペランドのいずれかが最初に評価される可能性があるため、結果は未定義です。
そして、まあ、PHP では、結果が 42 で、php.ini へのいくつかの変更が保留されていても驚かないでしょう。
このスタイルで使用した場合の の動作は未定義です。これは、操作がいつ発生し、いつ値が から「返される」++
かが正確にわからないためです。++
x++
i++
関数パラメーターとして渡された場合、 or++i
または--i
ori--
は特定の順序でインクリメント/デクリメントしないため、これは未定義の動作です。
それだけでなく、私が間違っていなければ、それprintf("%d", i++*i++);
は単に出力してから2回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
。
優先順位の問題です。http://php.net/manual/en/language.operators.precedence.phpをご覧ください。