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

本帖最后由 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值