持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天。
因为今天查看代码的时候突然发现一个有意思的东西,那就是for循环调用的顺序,他的执行顺序是什么,后面查看后明了,做一个笔记用作自己记录学习。
一、基础的for循环
大家都知道for循环的一些规则,用于判断条件是否满足,不满足则退出
#include <stdio.h>
int main ()
{
for (int i = 0; i < 3; i++)
{
printf("这是一个简单的循环i = %d\n", i);
}
}
这样都知道,当I=3 的时候,我们的循环就退出,也就是整个函数会执行3次。
# ./a.out
这是一个简单的循环i = 0
这是一个简单的循环i = 1
这是一个简单的循环i = 2
我们再换个写法
#include <stdio.h>
int main ()
{
for (int i = 0; i < 3; ++i)
{
printf("这是一个简单的循环i = %d\n", i);
}
}
# ./a.out
这是一个简单的循环i = 0
这是一个简单的循环i = 1
这是一个简单的循环i = 2
发现没,我将i++换成了 ++i,我们都知道i++和++i的区别在于,一个计算后执行+1,一个先+1再执行,但是我们打印出来的值都一样,这说明了什么。说明有可能我们最后一个条件没有被执行。
二、for执行的步骤
也就是说,如果我们将刚才的函数成步骤来进行执行 步骤1: int i = 0; 步骤2: i < 3; 步骤3: ++i; 步骤4: for循环函数内部的执行函数;
查看了对应的资料后,发现并不是按照我们想象中的 步骤 1234 进行执行的,而是按照步骤 1243,243,243这样进行执行的,也就是说当步骤2不满足条件的时候,我们剩下的步骤43都不会执行,而步骤1只执行一次。
为了更加清晰的展示,我们再写一个测试代码:
#include<stdio.h>
int out(char c)
{
printf("%c\n", c);
return 1;
}
void main()
{
int i = 0;
for (out('A'); out('B') && (i < 2); out('C'))
{
i++;
out('D');
}
}
# ./a.out test.c
A
B
D
C
B
D
C
B
我们可以将输出做个一整理: 第一次循环输出 ABDC 第二次循环输出 BDC 第三次循环输出 B(这里不叫循环,因为这个循环根本就没有执行,只执行前面的一直为true的打印输出函数)
这样我们就很清晰的看到了整个for循环的顺序了。