A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© blensmile 中级黑马   /  2015-9-30 20:17  /  442 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[ 本帖最后由 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, 下载次数: 12)

截图20150930203337.png

1 个回复

倒序浏览
你把x=x++理解成
int temp=x++;
x=temp;
你就会发现x的值在自增1后又回来了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马