i++和++i到底什么时候+1?

i++和++i

今天在使用 if( ) 中写错了一个判断条件,但是对i++和++i有了一些新的理解,所以打算写下来。
i++:先使用再自增
++i:先自增再使用
但是这个自增的时间点其实是一样的,都在i使用完毕后立刻自增。只是在本轮循环中使用的i值不同
举个我今天遇到的例子:
这段代码是输出如下图型:
* * * * *
 * * * * *
  * * * * *
   * * * * *
    * * * * *

#include <stdio.h>

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 <stdio.h>

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

猜你喜欢

转载自blog.csdn.net/qq_42196480/article/details/88227592
今日推荐