>백엔드 개발 >PHP 튜토리얼 >$a = 2; $b = &$a; echo (++$a) + ($a++) ; 为什么答案是7不是6

$a = 2; $b = &$a; echo (++$a) + ($a++) ; 为什么答案是7不是6

WBOY
WBOY원래의
2016-06-23 14:20:452452검색

本帖最后由 lscxp 于 2013-08-29 18:18:23 编辑

引用 php

$a = 2;$b = &$a;echo (++$a) + ($a++) ;


这个出来是 7

$a = 2;echo (++$a) + ($a++) ;


这个答案是6

但是那个$b从头到尾就没用过,为什么加了一行之后    答案就不一样了?

回复讨论(解决方案)

看这帖
http://bbs.csdn.net/topics/390571704

一天居然两人问同一个问题

$b = &$a;
应该是把变量a变成引用类型了。

$a = 2;
echo (++$a) + ($a++) ;
过程是  
先运行$a自增,然后把自增后的结果返回,就是3
3+ ($a++) 
$a++的结果是3,然后会执行$a自增,但是表达式的结果已经返回了就是3
所以输出是 3+3 ,a是4

$a = 2;
$b = &$a;
echo (++$a) + ($a++) ;
则不同,(++$a)不受影响,
($a++)和之前不一样,之前应该是返回 $a的值,
现在应该是返回指向$a的地址(当然还是要通过地址获取实际值的)
返回$a的地址后,会执行$a自增,a变成4, 而之前只是获取到了$a的地址,
现在会进行寻址获取值,所以获取到的是4
结果是 3+4

$b = &$a;
应该是把变量a变成引用类型了。

$a = 2;
echo (++$a) + ($a++) ;
过程是  
先运行$a自增,然后把自增后的结果返回,就是3
3+ ($a++) 
$a++的结果是3,然后会执行$a自增,但是表达式的结果已经返回了就是3
所以输出是 3+3 ,a是4

$a = 2;
$b = &$a;
echo (++$a) + ($a++) ;
则不同,(++$a)不受影响,
($a++)和之前不一样,之前应该是返回 $a的值,
现在应该是返回指向$a的地址(当然还是要通过地址获取实际值的)
返回$a的地址后,会执行$a自增,a变成4, 而之前只是获取到了$a的地址,
现在会进行寻址获取值,所以获取到的是4
结果是 3+4


$a = 2;
$b = &$a;
echo  ($a++)  + (++$a);  //结果是6
这个怎么解释呢?

&$a 表示链接 所以3+3=6

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.