我正在为我的决赛学习,我遇到了这个问题:
运行此代码后写入输出。
<?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。
有人可以向我解释输出吗?
答案 0 :(得分:5)
你得到的实际上是3分,20分,6分,36分,这是正确的答案。如果你不明白为什么你得到“206”而不是“20”和“6”,那只是因为你在第一个print
之后没有空格。就是这样。
答案 1 :(得分:1)
首先打印声明打印3,20 第二次印刷声明打印6,36
首先不要对此感到困惑.. 当您通过ref传递值时,它会更改原始值..这就是为什么它将第二个输出作为6,36
答案 2 :(得分: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
答案 3 :(得分: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。