新浪的一道面试题

题目大概如下,具体数据记不清了,要求写出输出结果。
$a = 1;
$b = 2;
$c = &$b;
$c = 3;
//1
if (($c = 4) > 0 | ($b = $a) > 0)
{
    $a ++;
    $b ++;
    $c ++;
}
printf("%d,%d,%x/n", $a, $b, $c);
做这个题要细心啊,一不留神就着道了,结果是:2,3,3。
本题的重点在引用上,在 PHP 中引用意味着用不同的名字访问同一个变量内容。如本题,一开始$b指向内存中一块存放数据的2的单元,通过$c = $$b这条语句$c也指向了这个内存单元。现在不管给$b还是$c赋其他值,都会影响内存中这块存储单元所存储的数据,导致$a和$b的值都为新赋的值。
所以在1处,$a = 1;$b = 3;$c = 3;
接着往下走,看清楚是$c = 4而不是$c == 4,这个if条件语句中又会改变$c和$b的值。
$c = 4  导致    $b = $c = 4;
$b = $a 导致    $b = $c = 1;
$a ++   导致    $a = 1 + 1 = 2;
$b ++   导致    $b = $c = 1 + 1 = 2;
$c ++   导致    $b = $c = 2 + 1 = 3;
最后输出结果:2,3,3。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值