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 では、2 つのオペランドのいずれかが最初に評価される可能性があるため、結果は未定義です。

そして、まあ、PHP では、結果が 42 で、php.ini へのいくつかの変更が保留されていても驚かないでしょう。

于 2012-09-11T12:45:28.020 に答える
1

このスタイルで使用した場合の の動作は未定義です。これは、操作がいつ発生し、いつ値が から「返される」++かが正確にわからないためです。++x++

于 2012-09-11T12:45:28.080 に答える
0

i++関数パラメーターとして渡された場合、 or++iまたは--iori--は特定の順序でインクリメント/デクリメントしないため、これは未定義の動作です。

それだけでなく、私が間違っていなければ、それ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

于 2012-09-11T12:52:18.617 に答える
0

優先順位の問題です。http://php.net/manual/en/language.operators.precedence.phpをご覧ください。

于 2012-09-11T12:44:53.240 に答える