i=i++; --> i=++i;或者i++;

解决方案 »

  1.   

    在K&R的n年前的C语言书里面就说了这个情况
    i=i++;之后i究竟是什么值要看编译器实现
    应该尽量避免这种用法
      

  2.   

    int i=0,k; //i赋出值0
    循环里 i=i++;
    就相当于 i=i;
    i还是等于0
    如果循环里改为:
    i=++i;
    就是10了
      

  3.   

    循环里 i=i++;
    就相当于 i=i;
    ????????????????????????
    kao
    不是吧
      

  4.   

    乍一看这么简单的问题拿来问,我反而不放心。贴来调一下发现问题了。
    因为i的初始值是0,当运行到i++时,i的值其实已经变成1了。但是每次循环过后好像又回到i=0这句。所以加1等于1,然后又变成0。所以不论怎么加,到了i=0这句,总是等于0。
    我以前都以为循环只对循环内的值作用,没想到上面的赋值代码也对循环有作用!
    如果把i的初值改为任意数,它到最后仍然是原始值。如同上面代码的0一样!
    谢谢这位大侠!请问为什么i=0会对循环产生作用。我以前看的任何书都没这样的说法,也没试过!
      

  5.   

    和循环没有关系
    int i=0;
    i=i++;
    MessageBox.Show(i.ToString());
    i还是等于零,这和c++里是不一样的
      

  6.   

    C#和C不一样的:
    int i = 0;
    i = i++;
    printf("%d\n", i); // 输出1int i = 0;
    i = i++;
    Console.WriteLine(i); // 输出0K&R说C语言没有对这种情况特别规定,但是按照C99的规范是"所有对参数的副作用都必须在函数调用之前生效",所以i = i++对于C99来说应该等效为i++;i = i;但是C#表现的却不是如此,它相当于int j;i = j = i++;
    i = i++;这种代码被编译为IL之后依然是这种结构,让CLR去处理了
    可以看作是CLR的bug
      

  7.   

    int i=0,k;
    for(k=0;k<10;k++)

     i=i++;

    Console.WriteLine(i);
    Console.ReadLine();那k的值一直在变,,,,,,,,,,,,,,,
    解释一下??????????????
      

  8.   

    i=0; 
    i=i++; 
    這在你使用的編譯器中測試會有一個固定的答案,你也可以用你的邏輯去合理 
    化它。 
    但這樣的式子在 C/C++ 的規定裡,結果 i 是未定義的! 
    因為++優先權高於=,所以i++會先求值得0(i的舊值),主運算式成了i=0, 
    但子運算式i+=1和主運算式的 i=0誰會先計值確是未定的。 
    最後計值的運算式決定了最後i的值,所以結果可能為0或1。 
    因此 
    i=i++; 
    是個錯誤的寫法,不應該出現在你的程中! 
      

  9.   

    更正:
    对于C99来说应该等效为i = i;i++;
      

  10.   

    当然是10了
    等价于
    int i=0,k;
    for(k=0;k<10;k++)
    {i=i;i++;}
    Console.WriteLine(i);
    Console.ReadLine();
      

  11.   

    i=i++分解如下
    No1 i=i(i=0)
    No2 int n=0
    No3 n=i+1(i=0,n=1)
      

  12.   

    如果是C语言,结果肯定是10.
    按照C#的语法,个人认为结果应该为10,但在.net中事实为0,我想应该是.net编译器的问题.
    这样的代码还是不用的好.
      

  13.   

    // 只要知道i++这样的语法作用结果要发生在语句结束以后不对 (-:
    i = i++;
    假如是之前:i先加一再赋值,应该是等效i++
    假如是之后:i赋值了再++,还是应该等效i++所以C99的i = i++等效于i++
    但是C#的不是,CLR设计上有问题,嗯
      

  14.   

    To:chenlm (李逍遥) 诶,C你没学好啊!!!
    看来你要打好基础i=i++
    先引用i=0,后赋值加1
      

  15.   

    嗯这里还有人在讨论x+=x++;http://weblogs.asp.net/lucabol/archive/2004/08/31/223580.aspx
    ...其实只要看这一句嗯:But first, DO NOT WRITE THAT CODE!!!
    (-:
      

  16.   

    int i=0,k;
    for(k=0;k<10;k++)

     i=i++;//这里是先把i赋给i,然后在自增1,这里的效果相当于i=i

    Console.WriteLine(i);
    Console.ReadLine();
      

  17.   

    这个应该不是bug  跟CLR有关系
      在java中也是一样的  =0
      

  18.   

    对是0,
    因为i=i++;
    i就是等于i,i++还没增加,,
      

  19.   

    以下解释来自MSDN 2003:
    增量运算符 (++) 将操作数加 1。增量运算符可以出现在操作数之前或操作数之后:++ var
    var ++
    其中: var 
    表示存储位置或属性或索引器的表达式。 
    备注
    第一种形式是前缀增量操作。该操作的结果是操作数加 1 之后的值。第二种形式是后缀增量操作。该操作的结果是操作数加 1 之前的值。也就是说
    i=i++;其实即等于i=i;的循环
      

  20.   

    可能c和c#的处理顺序不同吧
    c#
    i= i >得出*式
    i++ > i=1
    i=0 * c
    i = i 
    i = 0
    i++ > i=1没有.net 
    谁试试j=i++ 看看是否是j=0 i=1