2 qq 31488279 qq_31488279 于 2017.09.07 08:01 提问

c语言++运算符的一个小问题。

有些钻牛角尖了,昨天学c语言,老师说++运算符放在前面是先递增再使用i的值,放在后面是先使用它的值。
突然有了一个问题:
for(int i=0;i<5;i++)
{
cout<<i<<;
}
c太麻烦,用c++写了一个,上面的程序会输出01234,这样不就和++运算符矛盾了,首先i等于0,然后打印,然后i++,此时i依旧等于0啊。。
求大神解答,想不通。。虽然一直都是这么用的,写成++i输出结果也是一模一样。

11个回答

WZJwzj123456
WZJwzj123456   2017.09.07 08:41

i++是一个完整的语句,执行了i++后再次循环,i自然就是1了,跟这个类似
for(int i=0;i<5;)
{
cout<<i<<;
i++;
}

Caoweiwww
Caoweiwww   2017.09.07 08:34

没明白你的问题的意思

u010983763
u010983763   2017.09.07 08:59

你这个问题的本质不在i++和++i的区别,而是没有吧for循环语句的执行流程弄懂。i++和++i的主要区别是:i++,是i的值加了1,但是i++这个表达式的值没有加一。而++i则是i的值加了1,++i这个表达式的值也加了1.

applewqj
applewqj   2017.09.07 09:08

你说的那种情况是在赋值时才会有先是先加1和后加1的区别,表达式算的是结果

xjn20144206177xjn
xjn20144206177xjn   2017.09.07 09:08

分号之前是一个完整的语句,当然会单独执行完,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);

glc22
glc22   2017.09.07 09:09

书面上的说法单从一个结果是看不出效果的
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]);
}
你跑跑看上面的代码,看下输出结果,应该就能明白了

lzwillforever
lzwillforever   2017.09.07 09:26

for循环内的i++是在for循环结束之前才执行的,也就说i++语句是在cout << i;之后才执行的,所以是先输出i值,i后自增1的。

qq_19957803
qq_19957803   2017.09.07 10:18

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。

loowooowool
loowooowool   2017.09.07 10:49

想单纯点,就是变量加1,先调用还是先自增,要根据你调用i这个变量的时机判断

JeremyIverson
JeremyIverson   2017.09.07 10:56

你这个循环看不出++i与i++的区别,当所有循环体都执行完毕时才i++,此时++i与i++等效的
你可以这样 int i=0,a;
a=i++; // a=++i;
printf("%d",a) //printf("%d",a);
看看打印区别

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片