### C语言关键字浅析系列 ###
### ISO/ANSI C 关键字 ###
for关键字似乎并不能从其字面本身看出其含义
但这是个最常见的关键字,而且在循环结构的使用中也基本是最多的
同while一样,for循环是一个入口条件循环,并且在某些方面比while显得更简洁干练
for的作用是:
表达for循环结构。
1、for的三个动作
注意,for循环后的括号内不是三个参数,而是三个动作
严格来讲它们分别叫做初始化,测试,更新,比如这条语句:for (i = 0; i < 10; i++)/* 循环体 */;
i = 0就是初始化过程,测试条件指的是初始化完成后是否有执行循环语句的条件成立,即i < 10,i++是执行完一遍后的更新操作
由于括号中的是三个动作,而且初始化操作只做一次,所以有时候初始化操作处不一定都是赋值语句:
int index = 0;
for (printf("Begin scanning\n");index != 1024;) /* 此处初始化操作其实是一个输出 */
{
getFromData(&index); /* 对index赋值 */
}
2、for的三个动作的缺省
在一些循环中,每趟循环完毕不一定非要有某个更新操作(如上),所以最后一个动作缺省的时候表示没有更新操作
当然这也依赖于for的缺省机制,按道理这三个动作其实都可以缺省掉而且不会认为是错误的:
/* 全员缺省的for,效果是死循环,但看上去怪别扭的 */
for (;;){}
/* 这样写死循环好一些没 */
while (1){}
/* 别看有些for循环表面上风风光光的,其实是个死循环,下面这个程序会一直加,加到爆炸 */
for (i = 0;;i++){}
/* 和上面老兄一个死样儿 */
i = 0;
while(1){i++;}
注意,第一个动作缺省可以理解,第三个动作缺省可以理解,第二个动作缺省为什么就死循环了?
因为当系统发现for的第二个动作缺省时,会认为是“真”,所以在一直条件为真的情况下就没有退出的情况了,这样的设备建议拔电源
3、逗号运算符
有时候for循环的初始化和更新操作可能不止针对一个变量,但一条语句只能修改一个变量,
这就催生了逗号运算符给for循环锦上添花的一段佳话
逗号运算符扩展了for循环的灵活性,使其在初始化和更新时能多做点事:
for (i = 0, j = 0; i < 10; i++, j += 2)
{
/* 虽然一次动作的子动作多了,但顺序还是一样的 */
}
——参考《C Primer Plus第五版》
相关文章: