黑马程序员技术交流社区

标题: 关于i = i++的实验. [打印本页]

作者: blensmile    时间: 2015-9-30 20:17
标题: 关于i = i++的实验.
[ 本帖最后由 blensmile 于 2015-9-30 20:35 编辑 ]\n\n
上课的时候,老师抛出一个问题:
    int a = 3;
    int x = 0;
    x = a++;
    x = a++;<p></p><p>    x = a++;
    System.out.println("x = "+x);
   
    x = x
    x = x++;
    x = x++;
    System.out.println("x = "+x);

得到的结果出乎意料,两个x值输出都是x=5</p><p>老师详细的解释了原因:
  1.表达式:变量和运算符连接而成的式子如:a+b,a++,a--
  2. x = a++; ( 里面有两个运算符++和=,但是++的优先级要高于= )
     (1)是将(a++)表达式的值赋值给变量x,而不是将a的值赋值给变量x,所以我们要先计算a++表达式的值,由于++符号在a的后面,所以先使用a的值,作为表达式的值,所以a++表达式的值是3
     (2)进行++运算,a=a+1,a变成4,但是不管a的值变为了多少,都不会影响第(1)步中的表达式a++的值(3)
     (3)进行赋值运算,将a++表达式的值(第一步已经算出来了3)赋值给x,x变为3</p><p>由以上信息,差不多可以理解最后的x=x++;最后x的值却不变的原因.
老师同时给演示了在eclipse中的步进运行,x++在將其表达式的值5赋给x后,x++执行自加,但它与x没关系了

通过课后查资料,在<你必须知道的495个C语言问题>的3.3节中讲到: i=i++; 没有正确答案,这个表达式无定义.之后我通过在两个不同的C++编译器中执行同样的代码,确实得到了不同的结果
codeblock运行结果是 i = 4
dev_C++的运行结果是 i = 2
对于这样的问题,个人认为作为初学阶段的我们,没必要太去深究,记住是这样的结果就好.


截图20150930203337.png (16.28 KB, 下载次数: 9)

截图20150930203337.png

作者: 月影千华    时间: 2015-9-30 20:23
你把x=x++理解成
int temp=x++;
x=temp;
你就会发现x的值在自增1后又回来了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2