您好,欢迎来到宝玛科技网。
搜索
您的当前位置:首页你真的理解$i++吗---之二

你真的理解$i++吗---之二

来源:宝玛科技网
在之前的文章中,们讲解了$j=$i++的执行过程这样的:

$temp=$i;

$i=$i+1;

$j=$temp;

并以此推断出了$i=$i++的正确结果,但同学们仍然不对的几道题目:

①$i=2;$j=$i+$i+$i++*++$i;echo$j;//结果多少?

②$i=2;$j=$i+$i++*++$i;echo$j;//结果多少?

③$i=2;$j=(++$i)+(++$i);echo$j;//结果多少?

④$i=2;$q=&$i;$j=(++$i)+(++$i);echo$j;//结果多少?

⑤$i=2;$j=($i++)+($i++);echo$j;//结果多少?

⑥$i=2;$q=&$i;$j=($i++)+($i++);echo$j;//结果多少?

以上6个题目,几乎部分同学都能出来第①个,可后面的题目基本都全军覆没,来先公布一下答案,然后逐一讲解。答案如下:

1

①12;②12;③7;④8;⑤5;⑥5;

关于①和②上一讲已经讲过,在此不多说。重说一下③④和⑤⑥。

对于③,很显然,个++$i为3,第二个++$i为4,其和为7;但④为什么结果不一样了呢?因为一个变量一旦被引用(即此处的$i),他返回的不再内存区域里对应的那个值,而返回指向那片内存的,直到符合运算规则时才从那片取值出来参与运算,因此,对于④,个++$i返回的并不运算结果3,而返回$i的,此时他的值3,但由于后面一个++$i,在执行加法运算之前先执行++$i,执行++$i,然后返回$i的,此时$i指向的那片内存已经变成了4,于两个4相加得8.

于有同学用上面的理论去推断⑥应该为7,但为什么还5呢,这就要再说明一下$i++了,$i++返回的变量没有加1之前的”值”而不再变量,而且这个值存的地方与$i变量存的也不同一个地方,自然不会变化,故即使变成引用也如此,故⑥为5,自然⑤也5,这个家还都能理解的。

题目讲完了,家什么感觉?不突然觉得自己以前理解的太肤浅?突然连$i++和++$i都搞不定了?其实,本节课的目的让家深入认识一下自增运算(自减也一样的),提醒家以后不要写那些复杂的自增自减运算而只在简单场景下使用他们。

2

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baomayou.com 版权所有 赣ICP备2024042794号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务