黑马程序员技术交流社区

标题: i++和++i???? [打印本页]

作者: 付凯鹏    时间: 2013-11-17 21:02
标题: i++和++i????
大家把i++和++i给我讲解一下,现在变得有点迷糊、、、、最好举个例子讲解

作者: 贺奕凯    时间: 2013-11-17 21:24
i++就是语句执行完毕以后补做一个i=i+1的赋值

++i就是在语句执行之前执行一个i=i+1语句

举个例子:
  1. class Demo
  2. {
  3.         public static void main(String[] args) {
  4.                 int m=0;
  5.                 for(int i=0;i<5;i++)
  6.                 {
  7.                         System.out.println(m++);
  8.                 }
  9.        
  10.         }

  11. }
复制代码
输出结果:0 1 2 3 4
  1. class Demo
  2. {
  3.         public static void main(String[] args) {
  4.                 int m=0;
  5.                 for(int i=0;i<5;i++)
  6.                 {
  7.                         System.out.println(++m);
  8.                 }
  9.        
  10.         }

  11. }
复制代码
输出结果: 1 2 3 4 5




作者: jing迪    时间: 2013-11-17 21:32
class Test{
        public static void main(String[]args){
                int a=0;
                System.out.println(a++);//打印结果是0,但是此后的a已经等于1了。(先用后加1)
                //注意:此时a等于1了。
                System.out.println(++a);//打印结果是2,此后的a等于2。(先加1后用)
                a++;//这是个式子,这式子完成后此后的a等于3了。
                System.out.println(a);//打印结果是3。
                ++a;//同理这也是个式子,这个式子完成后的a等于4了。(无论++在前和在后式子完成后a都加1了。)
                System.out.println(a);//打印结果是4.
                //综合练习
                int b=a++ + ++a;/*结果b=10。解析:此式子相当于int b=(a++)+(++a)接着算int b=4+6=10。其中a++遵循先用后加1所以参加运算的是4,
                但这个式子(a++)结束了此时a已经加1了所以此后的a=5;然后接着算++a遵循先加1后运算所以参加运算的是5+1=6,所以最终结果是b=10。
                此后的a等于6了。*/
                System.out.println("b="+b+";        a="+a);
                /*总结:
                        1.a++先用后加1
                        2.++a先加1后用
                        3.无论++在前和在后式子完成后a都加1了。*/
                }
        }
作者: 马晓平    时间: 2013-11-17 21:54
       1 首先两者的区别是:前者是先赋值,然后再自增;后者是先自增,后赋值

       2 ++i和i++都是分两步完成的。因为++i 是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i = a =b,即 ++i 是一个左值(可被寻址的值);i++ 的后面一步是自增,不是左值.

       3  ++i 和i++ 的使用,一般来说在循环域里面,这两者并没有什么很大的区别,因为编译器一般都会给你做优化。但是要注意其生存周期,以及很难察觉的写脏,就好像指针delete以后一定要赋予0一样,我们要注意i值在程序流中的变化。

       4  i=1 ; j=(++i)+(++i)+(++i); printf("J=%d/n",j); 这个结果是什么?没有结果,因为不同的编译器做出来的结果,我用vc6和gcc出来的结果是一样的,但是我坚信这么多不同编译器的优化规则都会导致这个怪异的结果。回过头来,这样coding,你会疯掉的,左手logic,右手biology千万别走火入魔!

       5 我们来看看在++行为上表现迥异的c++程序和java程序

test.java

public class test{

          public static void main(String args[]){

                int i = 0 , j ;

                for(j=0;j<5;j++){

                      i=i++; System.out.println("i="+i);

                }

         }

}

test.c

#include<stdio.h>

main(){

  int i = 0 , j ;

  for(j=0;j<5;j++){

     i=i++ ; printf("i=%d/n",i);

  }

}

test.java的结果是 i=0 i=0 i=0 i=0 i=0, test.c的结果是 i=1 i =2 i=3 i=4 i =5

作者: Faner    时间: 2013-11-17 21:58
i++和++i  不赋值时候 是一样的 没区别   如果赋值 i=o      t=i++或t=++i  有区别    t=i++  先赋值 (=)后++      。。。t=++i   先(++) 后赋值 (=)     记住 i 前先碰到 那个符号 那个符号先进行运算
作者: zbgl    时间: 2013-11-17 22:18
i++是在赋值之后运算的,而++i是在运算之后赋值的。
作者: 呆呆呆    时间: 2013-11-17 22:23
这个地方也不太清楚,受教了




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