x=i++相当于:
int temp;
temp = i;
i=i+1;
x=temp;
所以,
i=0;
i=i++;==>
temp=0;
i=1;
i=temp; ==> i=0;and
a=i++; ==>
temp = 0;
i=1;
a=temp; ==> a = 0;

解决方案 »

  1.   

    没什么错的了,++  的优先级比=高,所以先运行i++,但是i=i++;执行的操作是把运行以前的值赋给i,所以应该是0,而 a当然肯定是0了
      

  2.   

    :)
    其实关于i++,所有的书都说得很清楚啊……
    i++以后,i=1,但i++这个表达式的值仍然是0啊……
    所以i=i++,i仍然是0……
      

  3.   

    这个问题我在181782.shtml中有叙述,请看
      

  4.   

    i =i++;是先运算再自加一
    如果i=0,i++加一的效果哪里去了
    i++在=运算时先把i=0;然后加一,
    那么i好象该是1了,i只有一个地址
    temp=i++就不同了,这里temp就是0
      

  5.   

     i = i++; 这个语句就是:
     temp = i++;
     i = temp;
    这两个语句同样效果的简写, i++ 的效果为什么一定要存在呢?
      

  6.   

    i++等于i=i+1
    i=i++这句先执行=
    所以i=0;
    然后执行i++
    所以i=1
    luodi请指点
      

  7.   

    i=i++时i的确为0,但在println输出时,i的值已经变了才对呀?起码C中是这样。
      

  8.   

    为什么你认为会先执行 = ?
    在Java/C/C++ 以及任何一种有 ++ 这个运算符的语言中, ++ 这个运算符都比 = 这个运算符优先级高,所以一定会先执行 ++, 记住, = 没什么特别之处,只是一个运算符!
      

  9.   

    对楼上的
    i++,和++i的区别在于,前者是先取i值,在进行++,后者是先++在取i值,=是没什么特别的
    但++是特别的
    单独用的话i++,和++i没区别
    但在表达式里面的话就要小心了
      

  10.   

    c/C++中
    int i=0;
      int man[2];
      man[printf("%d\n",i)]=(i++)+(i++)+(i++)+(i++)+(i++);
    得到0
    说明i++在赋值语句后计算,而不是表达式后计算