首页 新闻 会员 周边 捐助

求解,我好晕i++和++i的区别

0
悬赏园豆:10 [已解决问题] 解决于 2015-12-25 12:40

比如说,for(i=0;i<9;i++)

                 {

                      

                 }

              for(i=0;i<9;++i)

                 {

                }

求解二者的区别

问题补充:

  谢谢各位的解答。  还有一个问题:在输入字符串时,使用for循环加scanf 来输入是不是有什么不妥?  我试了,答案错误,但是我用了gets之后,答案就正确了。。

Akemo的主页 Akemo | 初学一级 | 园豆:110
提问于:2015-12-24 10:34
< >
分享
最佳答案
0

1、 当i++  和    ++i  独立作用时,在效果上是没有区别的,都是使i 自增1.但是效率上有区别,一般认为++i效率高于i++

2、当i++ 和 ++i作为右值,或者说给别的变量赋值的时候,就有区别了:

    如果 i = 1

          a =i++    //a获得i的初始值 1,然后i自增为2

          a=++i    //a获得i的自增后的值2,i当然也变为了2;

收获园豆:10
lulipro | 菜鸟二级 |园豆:273 | 2015-12-24 13:01
其他回答(8)
1

你这样看看就明白了:(我这里没有C环境,用Java代替,原理一样)

public class Test1
{
    public static void main(String[] args) {
        for (int i = 0; i < 9; ) {
            System.out.println(i++);
        }
        System.out.println("-------------------------");
        for (int i = 0; i < 9; ) {
            System.out.println(++i);
        }
    }
}

++i表示先让i增加1,然后再让i参加别的运算,i++表示i先参加计算,然后再让i增加1.你举的例子里两个效果是一样的,因为for循环里,第三个表达式是在{}里的运算做好后再执行的。

酱油能 | 园豆:586 (小虾三级) | 2015-12-24 10:41
0

a=i++;表示先算a=i然后再i=i+1;比如ii=1时,先计算a=i=1,然后i=i+1=1+1=2;
b=++i;表示先算i=i+1然后算b=i;比如i=1时,先计算i=i+1=1+1=2,然后b=i=2

编程浪子Yiutto | 园豆:207 (菜鸟二级) | 2015-12-24 10:41
0

你就这么理解,++在前面,就先加1,再计算,++在后面,就先计算,再加1

水晶途途 | 园豆:1443 (小虾三级) | 2015-12-24 10:46
0

你这种情况下没有区别。

i++:先对i作相关运算,然后自增

++i:先自增,然后作相关运算

var list=[0,1,2];
var i=0,a=list[i++];  => a=0,i=1
var i=0,a=list[++i];  => a=1,i=1
Devin Liu | 园豆:215 (菜鸟二级) | 2015-12-24 10:49
0

简单地说,都是I自加1。区别是,I++是执行完后面的语句才加1;而++I就先做I+1才执行后面的语句。

打个比方,i++你必须写完一个作业才给一个棒棒糖,++i给你一个棒棒糖你必须做一个作业

伊夏丶 | 园豆:9 (初学一级) | 2015-12-24 10:58
0

比如:a=1;i=1;

a=++i;------>a等于i加一的和

a=i++;------>a等于i,i的值为i+1

如此低调的男人 | 园豆:842 (小虾三级) | 2015-12-24 11:06
0

比如:a=0,i=1

a=i++ ==> a=i, i=i+1 ==> a==1, i==2

a=++i ==> i=i+1, a=i ==> i==2, a==2

米修君 | 园豆:553 (小虾三级) | 2015-12-24 12:15
0

i++是进行完本次循环的操作后i+1,++1是i先+1在进行本次循环操作

龙葛格 | 园豆:782 (小虾三级) | 2015-12-24 14:12

for 循环和scanf 本身并没有冲突。你可以把code贴出来看看吗

支持(0) 反对(1) 龙葛格 | 园豆:782 (小虾三级) | 2015-12-24 16:05
int main()
{
    for(int i=0;;i++)
    {
        
        printf("i=%d\n",i);
        break;
    }     
    
     for(int i=0;;++i)
    {
        
        printf("i=%d\n",i);
        break;
    }     

    return 0;
} 

你自己运行看看

支持(1) 反对(0) lulipro | 园豆:273 (菜鸟二级) | 2015-12-24 18:11

@代码钢琴家: 

for (int i = 0; i < 10;)
            {
                printf("i=%d\n", i++);
                break;
            }
for (int i = 0; i < 10;)
            {
                printf("i=%d\n", ++i);
                break;
            }

你那种写法上下两种效果是一样的,你这样写就能看出区别了。我也不知道为啥有人给我点反对。我觉得我的理解没啥问题。如果有问题,希望大家再给我点反对的同时告诉我哪里错了。在此拜谢了

支持(0) 反对(0) 龙葛格 | 园豆:782 (小虾三级) | 2015-12-28 16:51

@龙葛格: 学习都是这样,错多了就明白了。有一点很重要:实践。 : )

支持(0) 反对(0) lulipro | 园豆:273 (菜鸟二级) | 2015-12-29 13:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册