欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

关于 ++和&一点疑惑

程序员文章站 2022-04-18 22:38:59
...
$a=1;
$b=&$a;
$b=$a++;

//求$a、$b
第二句话的意思是b也指向了a的地址;
第三句话的意思是在使用后a的值加1,所以$b=1;
关键是后面我不了解了$a++,不表示使用后加1,所以现在$a=2;
可是$b的地址和a的地址一样岂不是$b也等于2?还是第三句话后面的$a++根本就是没执行?这道题答案是$a,$b都是1;
比如和这个比较
$a=1;
$b=$a++;
?>
这个不就是$b=1,$a=2
有点晕啊。。。


回复讨论(解决方案)

$a=1;
$b=$a++;

结果:
$b = 1
$a = 2;

如果在中间加 $b = &$a;
表示$a $b 指向同一个地址
如果$b改变,$a的值也会变,最终$b = 1,$a = 1

$a = 1;$b = $a++;var_dump($a, $b);/*int(2)int(1)*/$a = 1;$b = &$a;$a++;var_dump($a, $b);/*int(2)int(2)*/$a = 1;$b = &$a;$b = $a++;var_dump($a, $b);/*int(1)int(1)*/

对于 $b = $a++;
将 $a 的值 1 取出赋予 $b,但 ++ 的优先级高于 =,所以取值后先不做赋值,而是做 ++,于是 $a 的值为 2(由于 $b 是 $a 的引用,所以此刻 $b 的值也是 2)
然后做赋值操作,$b 的值就等于 1 了
因为 $b 是 $a 的引用,于是 $a 又被改回了 1

基础没打好~ 谢谢版主 明白了!

如果你不知道运算符的优先级 可以这样理解!


形象点说就是 a b 代表同一抽屉里有几个苹果! 小明负责看一眼a所在的抽屉 把抽屉里有几个苹果记住(即a是多少),然后往抽屉里多放一个苹果! 然后再把b所在的抽屉里的苹果数变成刚刚记住的苹果数,即a的值! 所以变来变去! 又变回a了!

第一种情况,没有引用

$a=1;$b=$a; // 这时 b=1 a=1$b=$a++; // a先赋值给b,然后再自增 b=1 a=2echo $a;echo $b;


第二种情况,引用
$a=1;$b=&$a; // b引用a,就是a,b是指向同一内存地址$b=$a++; // a 把值读出后执行自增,a=2 b=2,然后再把值赋值给b,所以b=1 a=1echo $a;echo $b;