4

私は決勝戦のために勉強していて、この質問に出くわしました:

このコードを実行した後、出力を書き込みます。

<?php
function swap($x, $y) 
{
  $x = $x + 1;
  $y = $y + 2;
  return $x * $y;
}

$a = 3;
$b = swap($a, $a);
print "$a, $b";
$b = swap(&$a, &$a);
print "$a, $b";
?>

私はこのコードが何をするのかを正確に理解していますが、それを実行した後、私が答えたものとはまったく異なる答えを得て、出力を本当に理解していません。私が得た出力は3、206、36でした。

誰かが私に出力を説明できますか?

4

4 に答える 4

5

実際には、3、20、6、36 が正解です。「20」と「6」ではなく「206」になった理由がわからない場合は、最初の の後にスペースがないためですprint。それでおしまい。

于 2012-04-19T07:32:30.347 に答える
1

あなたの関数を以下のものに置き換えると、なぜ出力がそのようになるのか理解できます

function swap($x, $y) 
{
    echo "<BR><BR>inside function<BR>:";
    echo "<BR>Original x : ".$x;
    echo "<BR>Original y : ".$x;
    $x = $x + 1;
    $y = $y + 2;
    echo "<BR>After x : ".$x;
    echo "<BR>After y : ".$y;
    echo "<BR>^^^^^^^^^^^^^<BR";
    return $x * $y;
}

参照渡しを使用しているため、x と y の 2 回目の値は 6 ,6 になります。$x = $x + 1 を実行すると 4 になり、その直後に $y = $y + 1 を実行すると $x = 6 (4+2) になります。そのため、製品は36になりました

于 2012-04-19T07:39:44.670 に答える
1

元の値は$a = 3

機能は次のとおりです。

function swap($x, $y) 
{
  $x = $x + 1;
  $y = $y + 2;
  return $x * $y;
}

参照渡しであるため、関数は の元の値を変更します$a。関数で$aは、 のパラメーターとして渡されるので4 に$xなります。参照される変数であるため、4 に変更されています。また、同じ変数を指しているため、実際には 4 になります。4 + 2 は、 を作成します。 また、 と の両方が変更した同じ変数を指しているため、 も 6 です。だから6になり、36になります。$y$x$a$y$a$y$y = 6$x$x$y$a$a$b

于 2012-04-19T07:47:10.960 に答える
1

最初の印刷ステートメントの印刷 3、20 2 番目の印刷ステートメントの印刷 6、36

最初にこれで混乱しないでください..refで値を渡すと、元の値が変更されます..それが2番目の出力を6,36として与える理由です

于 2012-04-19T07:34:32.557 に答える