前言

无论是何种语言,for循环是一次都没离开过我们的。这样一个随处可见的循环函数,又为什么能引起关注呢?下面我们一起走进for循环的前世今生,一览它英姿飒爽的风采!
观看需谨慎,无聊别骂街哦~~

一、for是何方神圣?

从接触编程语言的第一天起,for就注定要出现在你的世界里。作为重要的基础函数,它指引我们省去一遍遍重复劳动的辛苦。大概生活就是这样,每天都在重复同样的事情,所以for应该是我们想不见都不可能的事情,每天都要受它千百遍的鞭挞。仿佛生命的枷锁一般,它与你在世界的每一处相遇,牢牢的禁锢着你。如果你不善待它,那它总会时不时的给你点儿颜色看看。

先看简单的例子:

using System;

namespace Loops
{ 
    class Program
    { 
        static void Main(string[] args)
        { 
            /* for 循环执行 */
            for (int a = 10; a < 20; a = a + 1)
            { 
                Console.WriteLine("a 的值: {0}", a);
            }
            Console.ReadLine();
        }
    }
}

这个例子的运行结果是,在每次循环的时候输出a的值。在循环内定义了a的值,而又不断的在改变它。是的,虽然每次都是重复的劳动,但是却带来不一样的结果。那么让我们来拆解下for的真面目吧:
1,for的组成部分之for:
这三个字母从何而来,那大概能追述到英语或者字母的诞生。所以这里就略去不表了,只能说它使用了英文里的单词来作为这个函数的标识符。切记,这里它不是英语单词,它是机器编程语言的标识符。还有,它不重要,它只是为了帮助你记住这个函数!
2,for的组成部分之小括号:
这一部分大概是for循环的心脏,它依靠由分号隔开的三组表达式来定义你这次的人生选择。给这三组表达式分别起个名字吧,我们叫它: Init, Condition, Increment。还是翻译成中文吧:初始化表达式,条件表达式,增量表达式。
3,for的组成部分之大括号:
这里是你的行动,你想要做的事情,所以由你来定。

二、爱从何而来

1.死板的面目,也不可憎

下面是for 循环的标准控制流:

init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。

接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。

在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。

条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。

所以我们通常会(int a = 10; a < 20; a ++),这样来设定条件,毫无新意的格式,毫无趣味的表达,倒也从不让我们失望!

2.尝试割掉它的左心房

听起来好残忍,医学发展到今天的地步,据说是可以使用人工心脏代替人来自己的心脏来获得生命的延续。而for的世界里,这件事从来都是没问题的。Example:

int a=9
int c=5;
int b=3;
for(;a<b;b++)
{ 
    c=a;a=b;
}

不知道吧Init比作左心房是不是合适,反正已经把它割掉了。F5之后,发现它能完美运行!为什么呢?因为本应存在于左心房的Init,这里借用了循环体外的定义。Init的本意就是在for运行开始的时候,定义一个变量并赋值。而变量到处都是,为啥一定要这里定义呢?你看,这里就使用了外部定义的变量。人生有很多不完整,残缺的月亮是另外一种美,不只是圆月当空才会凭栏思乡。

其实for的心脏是强大的,不管是左心房还是右心房,即便是连接心房的血管都可以略去。但是左心房可以写在函数体外部,而右心房和心血管则必须在函数体内部,也就是大括号内实现。不然它会死给你看的!
想一想看在TODO的部分怎么写,才能让下面这个for成为你的左膀右臂吧。

//TODO
for( ; ; )
{ 
    //TODO
}

3.亦正亦邪,即使变成丑八怪也要强大无边

玄幻电视里面的反派都是千奇百怪的,无头怪,九头怪,三只手,四只手,一会儿变螃蟹,一会儿变大猩猩,好是眼花缭乱。啊,你说for能不能变成奇怪的怪物?当然,是不能的,但是它有更多可能性。Example:

for(int i = 0, j = 0, a = 22; i < 3, a > 10; i + +, j = a + i, a - -)
{ 
	//你想要干啥?
}

你看上面这家伙,三头六臂的,好是复杂啊!提问,如果这个循环能运行的话,会循环几次?



你算到答案了么?其实,这个提问没答案,因为大括号里面啥也没写啊。如果不计算大括号里面的内容的话,倒是能算出有几次。
简单的看下为何能这么写:
这要从for的控制流说起,就是第一章第一节的那一部分内容,很多人都没仔细看吧。在进入一个for循环之后,

首先执行的是括号内第一个分号之前的部分,即定义变量。但是这里有且仅执行这一次,所以有局部变量需要声明的都可以放在这里。如果你不嫌长的话,放多少个都没问题。

然后会判断condition中的条件,为true,则执行循环内表达式,为false,则退出循环。当然,这里的判断条件也可以不止一个,只要表达式返回bool类型的结果就可以。所以表达式也不限于a < 10这种简单的,加上”&&”,”||”等符号都是可以的。

在执行完大括号内的表达式之后,for会进行增量计算。也就是Increment,然后再回到判断condition中的条件,从而构成了一个循环。既然前面两个都不限个数,那Increment也是不限表达式个数的。只要把握住它运行的顺序以及如何运行的就可以了。

以上在同一个栏目里的表达式用逗号隔开~~~心脏的零件越多,心脏的可能性越大,但是一不留心也会堵塞。心血管疾病虽然难治,却让for有了更多无限的可能。

总结

写这篇,是为了帮助记忆。当时间久了,总会忘记一些东西。或者当经验不足的时候,一些东西总是看着奇怪的。探究原理又不一定是必须的,所以不管怎样,记住它,写下它,希望对自己的道路有帮助。至于为什么使用那么花里胡哨的文字,是因为脑袋中的灵光一现。嗯,是这样的!

本文地址:https://blog.csdn.net/qq_47510310/article/details/109227384