$i =5;
$p = ($i++)+($i++)+($i++);
echo $i;
echo "<br />";
echo "p:".$p;结果为8和18;而在C中 则输出 8 和15php 与c 的解释:
i参与运算后,i的值再自增1如:$j= $i++;则此时跟c同样输出5.高手来解释吧
$p = ($i++)+($i++)+($i++);
echo $i;
echo "<br />";
echo "p:".$p;结果为8和18;而在C中 则输出 8 和15php 与c 的解释:
i参与运算后,i的值再自增1如:$j= $i++;则此时跟c同样输出5.高手来解释吧
5 + 6 + 7
#include <stdio.h>
void main()
{
int i=5;
int p;
p = (i++)+(i++)+(i++);
printf("%d\n%d",i,p);
}
个人理解,在php 中
第一次 p=5 //($i++)开始计算 $i=6
第二次 p= 5+6 // ($i++) $i=7
第三次 p= 5+6+7 // ($i++) $i=8c中 i 一直保持不变,直到赋值结束才开始自增
在php中个人的理解
$p = ($i++)+($i++)+($i++); 第一个($i++)先用5进行计算 再自身加1 第二个($i++)就成6... 你的 6 7 8 就成21了
嗯 这个有意思 等其它高手 我的是Dev-C++ 4.9
p = (i++)+(i++)+(i++);
004113C5 mov eax,dword ptr [i] //将i赋值到eax
004113C8 add eax,dword ptr [i] //将i加到eax
004113CB add eax,dword ptr [i] //将i加到eax
004113CE mov dword ptr [p],eax //将eax赋值给p所以,是15。
5 + 6 + 7
但是,在VC2005,2008,TC200中,我测试的实际结果及分析如下:
i=5;
p = (i++)+(i++)+(i++); // 这时的i的值是5。所以,p=i+i+i的结果是15,然后对i进行三次自增1,得到8.
p = (++i)+(i++)+(i++); // 这时首先对i加1,然后i的值变为6,得到p的值是18,再对i进行两次自增1,得到的也是8.
p = (++i)+(++i)+(i++); // 这时首先对i现两次加1,这时i的值变为7,得到p的值是21,再对i进行一次自增1,得到的也是8.
p = (++i)+(++i)+(++i); // 这时首先对i现三次加1,这时i的值变为8,得到p的值是24.
从而,我们是否可以得到结论:
1、++i,如教科书所说的。首先进行自增,然后再进行计算。
2、i++,是完成所有的操作(计算完所有的表达式,进行左赋值)之后,再对i进行相应的自增次数,这与PHP和C#不同。
p = i++*++i+i--*--i = ??其实结果我想大家都知道,至于为什么,至少我还不是很清楚
应该首先进行操作,也就是自左向右
++i进行操作之后,i的值是6,然后--i之后的值i是5;
这时p=5*5+5*5=50,得到相应的结果后,就剩下两个操作i++和i--,这时得到的i的值仍然为5.