php程序如下:$a=1; $b=&$a; $b=$a++;echo $a,$b;请问为什么输出是1,1不是2,2?

如题所述

第1个回答  2012-02-07
注意运算符的优先级追问

$a++ 是先把1赋给了$b,再++,但是++之后应该是2啊?难道白++了?

追答

首先、自增运算符++的优先级比赋值运算符=的优先级要高
关键在$b=$a++;这句话的执行
这句话在计算机内部的实现过程如下:temp(中间变量)
temp=$a;$a=temp+1;return temp;
$b获得返回的temp=1;
所以先执行的是$a++ 再执行$b的赋值过程$b=temp=1
所以最终结果会是1,1

追问

高手,一看就是高手。
你的意思是说:temp=$a=1,$a++=temp+1=2,return temp(因为temp没变,所以返回值是1);
而$b获得返回的temp=1; 正是因为$b是由temp赋的值,而非$a++ =2赋的值。所以$b=1。
我理解的对吗?
如果对路,问题来了。$a和$b都指向共同的地址,如果temp正是引用赋值的地址中存的值,
那么$a的地址既然已经放了temp了,$a++的值又寄存在哪里了呢,我觉得这个值也应该放在存temp的地址里啊?那岂不冲突了?

追答

理解对的、所以让你注意下运算符的优先级,开始$a++是存在于$a和$b共同指向的地址,然后执行的是$b=temp,此时$a++的值已经被覆盖了,不存在冲突的

本回答被提问者采纳
第2个回答  2012-02-08
echo $a,$b;//这样不报错么?
<?php
$a=1;
$b=&$a;
$b=++$a;
echo $b."==".$a;
?>

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网