$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.高手来解释吧

解决方案 »

  1.   

    $p = ($i++)+($i++)+($i++);
    5  + 6  +  7
      

  2.   


    #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 一直保持不变,直到赋值结束才开始自增
      

  3.   

    试了下c++ 确实跟php不一样 应该如你所说
    在php中个人的理解
    $p = ($i++)+($i++)+($i++);  第一个($i++)先用5进行计算 再自身加1 第二个($i++)就成6... 你的 6 7 8 就成21了
      

  4.   

    自己写个代码测试下就知道了,我的环境Turbo C++
      

  5.   


    嗯 这个有意思 等其它高手 我的是Dev-C++ 4.9
      

  6.   

    无语了,原来是这样:
      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。
      

  7.   

    $p = ($i++)+($i++)+($i++);
    5 + 6 + 7 
      

  8.   

    在PHP和C#中,确实得到的结果是:结果为8和18。这与我们平常所看到教科书上的解释是一致的。
    但是,在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#不同。
      

  9.   

    按你的思路,解释这个表达式是怎么运行的?
    p = i++*++i+i--*--i = ??其实结果我想大家都知道,至于为什么,至少我还不是很清楚
      

  10.   

    我是这样认为的,对于++i和--i,这两个运行算,优先级别应该是一致的!
    应该首先进行操作,也就是自左向右
    ++i进行操作之后,i的值是6,然后--i之后的值i是5;
    这时p=5*5+5*5=50,得到相应的结果后,就剩下两个操作i++和i--,这时得到的i的值仍然为5.