有些钻牛角尖了,昨天学c语言,老师说++运算符放在前面是先递增再使用i的值,放在后面是先使用它的值。
突然有了一个问题:
for(int i=0;i<5;i++)
{
cout<<i<<;
}
c太麻烦,用c++写了一个,上面的程序会输出01234,这样不就和++运算符矛盾了,首先i等于0,然后打印,然后i++,此时i依旧等于0啊。。
求大神解答,想不通。。虽然一直都是这么用的,写成++i输出结果也是一模一样。
没明白你的问题的意思
i++是一个完整的语句,执行了i++后再次循环,i自然就是1了,跟这个类似
for(int i=0;i<5;)
{
cout<<i<<;
i++;
}
你这个问题的本质不在i++和++i的区别,而是没有吧for循环语句的执行流程弄懂。i++和++i的主要区别是:i++,是i的值加了1,但是i++这个表达式的值没有加一。而++i则是i的值加了1,++i这个表达式的值也加了1.
分号之前是一个完整的语句,当然会单独执行完,i++;和 ++i;作为单独的语句效果是一样的
如果是赋值语句 a=0; i=0;** a=i++;** 该语句执行完后 a=0,**该语句先执行 i 对 a 的赋值,i 再自增 ,此时 i=1;
但 a= ++i;** 该语句**先执行 i 的自增 ,此时 i=2, 再对 a赋值**,所以 a=2;
你可以运行一下下面这些语句
a=0;i=0;
a=i++;
system.out.println(a+" "+i);
a=++i;
system.out.println(a+" "+i);
你说的那种情况是在赋值时才会有先是先加1和后加1的区别,表达式算的是结果
书面上的说法单从一个结果是看不出效果的
char A[] = "HelloTest";
for (int i = 0; i<5;)
{
printf("%c", A[i++]);
}
printf("\n");
for (int i = 0; i<5;)
{
printf("%c", A[++i]);
}
你跑跑看上面的代码,看下输出结果,应该就能明白了
for循环内的i++是在for循环结束之前才执行的,也就说i++语句是在cout << i;之后才执行的,所以是先输出i值,i后自增1的。
for(int i=0;i<5;i++)
{
cout<<i<<;
}
这个循环你可以理解为一下语句的循环
int i = 0;
loop:
if (i < 5)
{
cout<<i<<;
i++;
goto loop;
}
这样你理解i++来说就简单了吧。因为在这里不管是i++还是++i,单独语句都没有使用到i。所以结果一直。
如果是这样的语句
cout<<i++<<;
cout<<++i<<;
这样就会有区别了,因为语句用使用到了i。此时第一句是先输出i然后在自增1,第二句则是先自增1在输出i。
想单纯点,就是变量加1,先调用还是先自增,要根据你调用i这个变量的时机判断
你这个循环看不出++i与i++的区别,当所有循环体都执行完毕时才i++,此时++i与i++等效的
你可以这样 int i=0,a;
a=i++; // a=++i;
printf("%d",a) //printf("%d",a);
看看打印区别
首先明确一点for循环本质问题
for循环本身是从0开始循环与5作为比较看是否满足循环条件满足循环条件之后进入循环语句
期间for语句执行方式为
int i =0;
for(i=0;i<5;)
{
i++;
}
初值为0 进入一次判断初值变为1进入下一次判读 数值递增 当i为5时循环不成立退出循环故i打印值为01234
当语句变为++i时
int i =0;
for(i=0;i<5;)
{
++i;
}
初值为0 进入一次判断初值变为1进入下一次判读 数值递增 当i为5时循环不成立退出循环故i打印值为01234
所以在for语句中i++与++i作为判断执行成立后的执行代码是不能反映出两者区别的
观察i++与++i区别最简单的方法就是利用算式结果表达数据
例;
int i=0,j=0,k=0;
j=i++;
k=++i;
打印j,k值就能直接反映出i++与++i的区别