奇怪的问题
namespace ConsoleApplication1
{
    class Class1
    {
        static void Main(String[] args)
        {
            int i=0;
            i=i++;
            Console.WriteLine(i.ToString());
        }
    }
}
按照我的理解,这时i应该等于1才对啊,为什么输出0

解决方案 »

  1.   

    i=i++,在++之前赋值,些时i是0没错,但后++也还是有加1呀,那么在输出时i的值应该已经变成1了呀。
    把这几句话放到C/C++中调试,结果就是1
      

  2.   

    i++ 先进行赋值后加
    ++i 先加后赋值

    int i=0;
    while(i++<5)
    {
    int b=i; //b 1-5
    }
    while(++i<5)
    {
    int b=i;//b 1-4  
    }
    最保险的写法  i=i+1    i+=1;
      

  3.   

    i=i++的意思不是说
    1)i=0
    2)i=i+1
    意思.而是
    1)i=0
    2)0++所以i=0
      

  4.   

    i=i++;
      
    相当于: (1) 先计算右边,即i++ , 结果是 i 的值等于了1, 但是i++ 返回的是0
             (2) 经过了(1),再把i++的返回值赋给i,所以i有变成了0
      

  5.   

    To:fd7893(看着办吧),clmilan(咔咔) 
      
       在C语言中这个结果就是等于1
      

  6.   

    有点迷糊啊?
    按逻辑分析应该是1的
    i=i++
    1、i=i
    2、i++
    这时候i是多少?应该是1
    但是执行好象是 i=i 并没有执行 i++
    如果你写成
    namespace ConsoleApplication1
    {
        class Class1
        {
            static void Main(String[] args)
            {
                int i=0;
                i++;//把赋值去掉
                Console.WriteLine(i.ToString());
            }
        }
    }
    这样会输出什么?1
    所以这里是不是有错误啊?
      

  7.   

    namespace ConsoleApplication1
    {
        class Class1
        {
            static void Main(String[] args)
            {
                int i=0;
                i=(int)Math.Pow(2,i++);
                Console.WriteLine(i.ToString());
            }
        }
    }
      

  8.   

    很显然,i++并不是在执行了这行代码之后才加1,而是在执行代码之前就预先加1。int i=0;
    i=i++;应该看成:int i=0
    int a=i;
    i++;
    i=a;
      

  9.   

    int i=0;
    i=(int)Math.Pow(2,i++);
    Console.WriteLine(i.ToString());
    中的 i=0 -->  i=3
      

  10.   

    输出为0,先使用i,i的值为0,然后i加1。
      

  11.   

    看IL代码
    中间有出栈和入栈操作,
    i首先出栈,被赋值之后i=i入栈
    最后的i++的操作完了之后没有入栈
    所以i的值不变。
      

  12.   

    int i=0;
                i=i++;
                Console.WriteLine(i.ToString());你可以试试
     int i=0;
                i=++i;
                Console.WriteLine(i.ToString());
    看看他们的区别。
      

  13.   

    因为在C语言和C#里边
    所有的程序执行都是从左到 右的执行,
    而且i++是先赋值再执行,我可以告诉你,你如果在Console.WriteLine(i.ToString());的后面重复写一条该语句
    输出的值是不同的输出的值 分别是0和1
    不相信的你试一下
      

  14.   

    ++ 优先级大于= 
    所以先运算++ , i++ 是 先取值在自身 ++ ,所以先把i 赋予一个临时变量,在自身++  i=1 ,
    再运算= ,把临时变量0 赋予i, i=0;
      

  15.   


    namespace ConsoleApplication1
    {
        class Class1
        {
            static void Main(String[] args)
            {
                int i=0;
                i=i++;
                Console.WriteLine(i.ToString());
            }
        }
    }
    结果:0
    namespace ConsoleApplication1
    {
        class Class1
        {
            static void Main(String[] args)
            {
                int i=0;
                i=i++;
                i=i+0;
                Console.WriteLine(i.ToString());
            }
        }
    }
    各位高手,结果是什么?   这时候,i是不是就等于1了???请各位指教...多谢