比如说,for(i=0;i<9;i++)
{
}
for(i=0;i<9;++i)
{
}
求解二者的区别
谢谢各位的解答。 还有一个问题:在输入字符串时,使用for循环加scanf 来输入是不是有什么不妥? 我试了,答案错误,但是我用了gets之后,答案就正确了。。
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;
你这样看看就明白了:(我这里没有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循环里,第三个表达式是在{}里的运算做好后再执行的。
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
你就这么理解,++在前面,就先加1,再计算,++在后面,就先计算,再加1
你这种情况下没有区别。
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
简单地说,都是I自加1。区别是,I++是执行完后面的语句才加1;而++I就先做I+1才执行后面的语句。
打个比方,i++你必须写完一个作业才给一个棒棒糖,++i给你一个棒棒糖你必须做一个作业
比如:a=1;i=1;
a=++i;------>a等于i加一的和
a=i++;------>a等于i,i的值为i+1
比如: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
i++是进行完本次循环的操作后i+1,++1是i先+1在进行本次循环操作
for 循环和scanf 本身并没有冲突。你可以把code贴出来看看吗
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; }
你自己运行看看
@代码钢琴家:
for (int i = 0; i < 10;) { printf("i=%d\n", i++); break; } for (int i = 0; i < 10;) { printf("i=%d\n", ++i); break; }
你那种写法上下两种效果是一样的,你这样写就能看出区别了。我也不知道为啥有人给我点反对。我觉得我的理解没啥问题。如果有问题,希望大家再给我点反对的同时告诉我哪里错了。在此拜谢了
@龙葛格: 学习都是这样,错多了就明白了。有一点很重要:实践。 : )