黑马程序员技术交流社区

标题: java和C++中在自增有点问题,运行结果不同,这是为什么? [打印本页]

作者: 韩国军    时间: 2012-5-16 21:52
标题: java和C++中在自增有点问题,运行结果不同,这是为什么?
java程序如下:
public class Add {
public static void main(String[] args){
        int i=2;
        System.out.println(i++);
        System.out.println(i);
        int a=i++ + ++i;
        System.out.println(a);
        System.out.println(i);
        for(int j=0;j<1000;j++)
        {
                i=i++;
        }
        System.out.println(i);
}
}
运行结果:
2
3
8
5
5
C++程序如下:
#include <iostream.h>
void main()
{
        int i=2;
        cout<<i++<<endl;
        cout<<i<<endl;
        int a=i++ + ++i;
        cout<<a<<endl;
        cout<<i<<endl;
        for(int j=0;j<1000;j++)
        {
                i=i++;
             }
     cout<<i<<endl;
}
运行结果:
2
3
8
5
1005
相同的程序在进行自增之后输出结果不同,有什么不同之处吗?

作者: 黄奕豪    时间: 2012-5-16 22:21
表示不懂~~~~~~~飘过~~~~
作者: 梁小波    时间: 2012-5-16 22:33
在c++与java中处理i=i++;不一样!
程序的执行顺序是这样的:因为++在后面,所以先使用i,“使用”的含义就是i++这个表达式的值是5,但是并没有做赋值操作,它在整个语句的最后才做赋值,也就是说在做了++操作后再赋值的,所以最终结果还是5;所以在循环的1000次里i值没有变化!
可以理解为int temp=i;i++;i=temp;所以没有变!
但在c\c++中就不同了,c语言都讲过,也是按正常人思维走的。我就不解释了。
作者: 胡团乐    时间: 2012-5-16 22:54
把java里的 i=i++; 改成 i++;;就和C++一样了是1005
对于i=i++而言只是把 i 的值赋值给了 i 而不是把 i++的值赋值给了 i;
就像打印System.out.println(i++);一样 结果还是 i 原先的值并不是 i++后的值;所以还是5 ,无论赋值多少次 都是把 5 赋给 5 ;
至于C++嘛我就不怎么了解了 嘿嘿 坐等高人哈
作者: 杨康    时间: 2012-5-17 00:09
{:soso_e127:}java中,++a 和a++作为单体是没有区别的,但是当做赋值运算时,就有区别了。例如:int a = 2, int b = a++ ; int c =2  int d = ++c, 打印输出后,b的值是2,d的值是3。两者的区别就是int b = a++是先将a的值赋值给b,然后a再自增。而int d = ++c是将c自增后再赋值给d,这时候d就为3.
对于c++语言没学过,不懂




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