关于自增或自减符号在自变量两侧时,在条件循环语句中变化情况

话不多说, 先看例子(条件为i++时):

#include
int main(void) {
	int i = 0;

	char arr[5] = "abcd";
	while (arr[i++]) {
		printf("%d\n", i);
		printf("%c\n", arr[i]);
	}

	return 0;
}
程序结果:

1
b
2
c
3
d
4

我前面一直以为 i++ 这个符号在循环或者判断语句里的时候, 是自增但是在当前循环下数字依旧是不会变的,比如:

当第一次循环时即 i = 0时,进入循环,i++导致i = 1, 但是 进入循环的依旧是0,虽然i已经自增为1了。然后!

当第二次循环时 i 才会用那个1, 即当第二次循环时 i = 1, 实际上由于i++的作用i已经变为2了,但进入循环依旧是1,直到第三次循环才会用那个2

如果按照我前面的理解,程序结果应该是

0
a
1
b
2
c
3
d
4

总结: 当循环或条件语句的条件为i++时,第一次循环时,i在进入循环前就已经自增为1了,只是没有用1来进行条件判断,也就是说进行条件判断的时候i是0,进入循环后打印的却是1.


当条件为++i时:

#include
int main(void) {
	int i = 0;

	char arr[5] = "abcd";
	while (arr[++i]) {
		printf("%d\n", i);
		printf("%c\n", arr[i]);
	}

	return 0;
}

程序结果:

1
b
2
c
3
d

++i和i++的唯一区别就是这里少了个4,当循环条件语句的条件为++i时,在第一次循环也就是i = 0的时候,i在进行条件判别时i就进行了自增,也就是说自增在进行条件判断的时候已经完成了,所以在最后4没了,当iprintf出来是3时候,也就是arr[3] = d,而在下一次进入了循环但是还没进行条件判断的时候,i就完成了又一次自增,即i为4,arr[4] = ‘\0’,所以结束了循环。


结论:在++i的情况下,自增是在进入了循环还没有进行条件判断的时候就完成了,也就是本次循环用的都是i+1,。


总结: i++ 条件判断用自增前的i值,进入循环用自增后的数值,而++i条件判断和进入循环的都是自增后的数值。





















你可能感兴趣的:(C语言,c语言)