[ 本帖最后由 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
对于这样的问题,个人认为作为初学阶段的我们,没必要太去深究,记住是这样的结果就好.
|
|