如题所述
第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;
?>
<?php
$a=1;
$b=&$a;
$b=++$a;
echo $b."==".$a;
?>