C#里:Ep1:for(int i=0;i<10;i++)
   Console.WriteLine(i.ToString());------------------------
Ep2:for(int i=0;i<10;++i)
   Console.WriteLine(i.ToString());===================================Ep1和Ep2的执行结果完全一致,请问C#里 i++和++i到底什么区别? 可以用一个像上面一样简单的例子来体现一下么? 谢谢。也许很多人都不清楚,也许只有我不清楚。。

解决方案 »

  1.   

    换成这样试试就知道啦
    Ep1: for(int i=0;i <10;) 
      Console.WriteLine((i++).ToString()); ------------------------ 
    Ep2: for(int i=0;i <10;) 
      Console.WriteLine((++i).ToString()); 
      

  2.   

    有学过C++吧using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ConsoleApplication21
    {
        class Program
        {
            static void Main(string[] args)
            {
                for (int i = 0; i < 10; i++)
                {
                   int a= ++i;
                    Console.WriteLine(a.ToString());
                }
                Console.WriteLine("-----------------------");
                for (int i = 0; i < 10; i++)
                {
                    int a=i++;
                    Console.WriteLine(a.ToString());
                }
            }
        }
    }
    你这样看看有没有什么差别
      

  3.   

    i++是先用i,然后再+1;
    ++i是先+1,然后再用对吧?那为什么我开始的两个Ep里执行效果是一样的呢?
      

  4.   

    (i++).ToString()理解为:i.ToString();i++;
    (++i).ToString()理解为: i++;i.ToString();
      

  5.   

    你把 i++ 和 i.ToString()分开不再一条语句当然不行啦
      

  6.   

    本身作为一个独立的表达式,i++与++i没有区别,都是自身加1 
    只有放在表达式里才有区别,i++是自增前参与表达式运算,而++i是自增后参与表达式运算
      

  7.   

    单独使用肯定一样. 你要连着用.结果就是两回事了. 比如: ++i++i+i++
      

  8.   

    我知道了 for里面只是自加了一下,相当于写for(int i=0;i<10;i=i+1)
    而我下面的WriteLine里也就是输出了一下,并未真正使用i++或++i
      

  9.   

    执行效率也许是我关心的,我正是看到很多for循环里  有人喜欢用i++,有人喜欢用++i,而效果都一样我才有此一问的
      

  10.   

    为什么C++叫“C++”而不叫"++C"呢?
    C++说明是从C进化而来的语言,包含所有C的功能,而且加入了更多新的内容。
    ++C说明完全变成另外的东西了,而这东西的内容是C语言和一部分新内容的集合,凭空出来的,以前从未存在过,这显然违背了"C++"语言的的本质。正如++i和i++,前者是(i+1),是个以前不存在的东西;后者是i=i+1,i自己的内容更新了。
    在你的例子里结果虽然是一样的,但是用++i时处理器在每次循环的时候少做一项工作:i=i+1,当循环子是int的时候当然看不出差别,可如果是个对象呢?用i++的对性能的影响是很大嘀!一点拙见,阐述的好外行啊
      

  11.   

    我还真不清楚了,难道你写成i++,NB的编译器能自动理解成++i? 什么编译器?
      

  12.   

    好  坚持用++i了  学到了很多谢谢各位了
    有关于i++和++i效率的阐述  可以继续   我暂时不结,方便更多的人学习到这些细节性的东西
      

  13.   


    几乎所有现代编译器都有这种简单的优化功能。在 Windows 下,当然是 Microsoft 的编译器了。
      

  14.   

    请看程序例子:
    class Program
    {
      static int x;
      
      static void Main()
      {
        Bar();
        Foo();
      }
      
      static void Bar()
      {
        for (int i = 0; i < 5; i++) x = i;
      }
      
      static void Foo()
      {
        for (int i = 0; i < 5; ++i) x = i;
      }
    }
    编译为 program.exe 后,用 ildasm 反汇编,结果如下:
    .method private hidebysig static void  Bar() cil managed
    {
      // 代码大小       24 (0x18)
      .maxstack  2
      .locals init (int32 V_0,
               bool V_1)
      IL_0000:  nop
      IL_0001:  ldc.i4.0
      IL_0002:  stloc.0
      IL_0003:  br.s       IL_000f
      IL_0005:  ldloc.0
      IL_0006:  stsfld     int32 Program::x
      IL_000b:  ldloc.0
      IL_000c:  ldc.i4.1
      IL_000d:  add
      IL_000e:  stloc.0
      IL_000f:  ldloc.0
      IL_0010:  ldc.i4.5
      IL_0011:  clt
      IL_0013:  stloc.1
      IL_0014:  ldloc.1
      IL_0015:  brtrue.s   IL_0005
      IL_0017:  ret
    } // end of method Program::Bar.method private hidebysig static void  Foo() cil managed
    {
      // 代码大小       24 (0x18)
      .maxstack  2
      .locals init (int32 V_0,
               bool V_1)
      IL_0000:  nop
      IL_0001:  ldc.i4.0
      IL_0002:  stloc.0
      IL_0003:  br.s       IL_000f
      IL_0005:  ldloc.0
      IL_0006:  stsfld     int32 Program::x
      IL_000b:  ldloc.0
      IL_000c:  ldc.i4.1
      IL_000d:  add
      IL_000e:  stloc.0
      IL_000f:  ldloc.0
      IL_0010:  ldc.i4.5
      IL_0011:  clt
      IL_0013:  stloc.1
      IL_0014:  ldloc.1
      IL_0015:  brtrue.s   IL_0005
      IL_0017:  ret
    } // end of method Program::Foo
      

  15.   


    不需要看懂,你只要比较一下,两段代码,除了方法名 Bar 和 Foo 不一样外,其他的地方一模一样,就能说明问题了。
      

  16.   

    ++i就是操作前i先加1,i++就是操作后i加1
      

  17.   

    这个就是for的问题吧。
    for(表达式1;表达式2;表达式3)
    {
    表达式4;
    }
    表达式1:只在第一次运行时执行一次
    1、执行表达式2,成立,则执行表达式4,
    2、执行表达式3;
    3、转到1
    对于这里的i++和++i来说结果都是一样的,都是每次循环结束后i的值自增1
      

  18.   

    你看一下这个帖子
    http://topic.csdn.net/u/20090731/22/e91059c5-077c-405f-855c-01e5655d9c7f.html?69438
      

  19.   

    我没有看到楼上说什么,因为太长了,个人认为是一样的 为什么呢?
    因为当for中间符合条件的时候,就输出了,而后面的i++ 和++i都没有执行之后并不是输出的结果,不信你可以在for循环外面再次输出i!!这样你就清楚了问题
      

  20.   

    Ep1: for(int i=0;i <10;i++) 
      Console.WriteLine(i.ToString()); ------------------------ 
    Ep2: for(int i=0;i <10;++i) 
      Console.WriteLine(i.ToString()); =================================== 

    Ep1: for(int i=0;i <10;) 
      Console.WriteLine(i.ToString()); 
      i++
    ------------------------ 
    Ep2: for(int i=0;i <10;) 
      Console.WriteLine(i.ToString()); 
      ++i;
    =================================== 
    是完全一样的,1,3楼的同志的代码显示与楼主的不一致了!