for循环调用顺序

134 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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循环的顺序了。