代码如下:
static void Main(string[] args)
        {
            int i=0;
            int c = 0;            for(int j=0;j<5;j++){
                i = i++;
                Console.Write("第"+j+"次:i的值:"+ i +" c的值:"+c);
                c = i++;
                Console.Write("\n第" + j + "次:i的值:" + i + " c的值:" + c);
                Console.Write("\r\n");
            }            Console.Write(i);
            Console.Write("+"+c);            Console.Read();
        }
请问具体的运算过程是怎么样的?为什么输出结果是这样的:第0次:i的值:0c的值:0
第0次:i的值:1c的值:0
第1次:i的值:1c的值:0
第1次:i的值:2c的值:1
第2次:i的值:2c的值:1
第2次:i的值:3c的值:2
第3次:i的值:3c的值:2
第3次:i的值:4c的值:3
第4次:i的值:4c的值:3
第4次:i的值:5c的值:4
5+4

解决方案 »

  1.   

    本帖最后由 caozhy 于 2011-10-08 18:56:43 编辑
      

  2.   

    我是这样理解
    int i = 0;
    int c = 0;
    i=i++; //把原来的值赋给了i,递增之后的值并没有赋值给i
    c=i++; //i=0 所以c等于0
    等价于
    int i = 0;
    int c = 0;
    int d = 0;
    d = i++;  //d=i等于0
    c = d++;  //c等于0
      

  3.   

    i= i++;等价于:var j=i;
    i= j+1;
    i=j;
    而 i= (i++) + 100;等价于:var j=i;
    i= j+1;
    i= j+100;
    而 i= (i++) + i;等价于:var j=i;
    i= j+1;
    i= j+i;
    不过,知道写这种代码的人比较不靠谱就行了,平常注意小心不要写出这种难以跟别人取得共识的代码。平常不要为了炫耀代码而写代码,写代码应该尽量清晰简明。
      

  4.   

    因为在计算i++之前,此时首先会把i压入当前计算堆栈,但是紧接着会再次复制一份,然后把栈顶的这个值加1并且弹出这个值并将结果赋值给i变量所在的位置,这样堆栈顶部仍然是原来的i值,而此时i变量单元的值已经改变了。这就相当于:1) var j=i;
    2) i= j+1;
    3) 然后使用j替代(i++)这个表达式来继续计算