i++和++i
今天在使用 if( ) 中写错了一个判断条件,但是对i++和++i有了一些新的理解,所以打算写下来。
i++:先使用再自增
++i:先自增再使用
但是这个自增的时间点其实是一样的,都在i使用完毕后立刻自增。只是在本轮循环中使用的i值不同
举个我今天遇到的例子:
这段代码是输出如下图型:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
#include <>
int main(){
int i=0,j=0,k=0;
char ch[5]={'*','*','*','*','*'};
for(i=0;i<5;i++){
if(i=0){
/*我这里写的 i=0 即if()里的逻辑值为 0 ,且给i 赋值为0,
所以下面判断 j 的循环永远不符合,不打印空格“ ”
并且每for语句执行之后,i立刻自增一,虽然在本次循环中使用的是i=0,
但是在if( )语句执行之前i已经自增过1了,
导致执行完if()之后给i赋值为0,将i的自增覆盖,造成for语句的死循环 */
for(j=0;j<5;j++)
printf("%c",ch[j]);
printf("\n");
}
else {
for(j=1;j<=i;j++) printf(" ");
for(k=0;k<5;k++) printf("%c",ch[k]);
printf("\n");
}
}
return 0;
}
为了验证是否i在for语句后立刻+1,我又尝试了一个例子:
#include <>
int main(){
int i=0;
for(i=0;i<5;i++){
printf("%d",i);//打印for语句之后 i 的值
i=0;
}
printf("\n%d",i);//打印循环之后 i 的值
return 0;
}
编译运行后会发现循环打印111…1,无法跳出循环
所以可以得出结论,i是在for语句执行之后立刻+1,并不是等到本轮for循环到末尾时再+1