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,这是正确的答案。如果你不明白为什么你得到“206”而不是“20”和“6”,那只是因为你在第一个之后没有空格print。就是这样。

于 2012-04-19T07:32:30.347 回答
1

第一个打印语句 print 3, 20 第二个打印语句 print 6,36

首先不要对此感到困惑..当您通过 ref 传递值时,它会更改原始值..这就是为什么它给出第二个输出为 6,36

于 2012-04-19T07:34:32.557 回答
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 的第二次值变为 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作为参数传递$x$y所以$x变成4。由于是引用变量,所以$a修改为4。现在$y也指向同一个变量$a,所以现在$y实际上是4。4 + 2使得$y = 6$x同样是 6,因为$x和都$y指向$a他们都修改过的同一个变量。所以$a变成6,$b变成36。

于 2012-04-19T07:47:10.960 回答