读书人

for话语的执行顺序

发布时间: 2012-11-26 11:48:50 作者: rapoo

for语句的执行顺序

【问题描述】for循环是C语言中常见的循环语句,for语句括号中的部分,其执行顺序是怎样?

【解析】

for语句的结构如下所示:

for(初始化;条件;调整)

{

示例语句;

}

第一次顺序:初始化 ->条件->示例语句

第二次顺序:调整->条件->示例语句

第三次顺序:调整->条件->示例语句

...

以此类推。

【示例】

看下面一个示例:

for(i = 0, j = -1; j = 1; j++) printf("********\n");

其输出是什么呢?不妨先推导一下,再验证自己的结论。

再看一个文本处理的例子(源码来自《系统程序员成长计划》):

#include <ctype.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#define IS_WORD_CHAR(c)(isalpha(c) || isdigit(c))typedef void (*OnWordFunc)(void* ctx, const char* word);int word_segmentation(const char* text, OnWordFunc on_word, void* ctx){enum _State{STAT_INIT,STAT_IN_WORD,STAT_OUT_WORD,}state = STAT_INIT;int count = 0;char* copy_text = strdup(text);char* p = copy_text;char* word = copy_text;for(p = copy_text; *p != '\0'; p++){switch(state){case STAT_INIT:{if(IS_WORD_CHAR(*p)){word = p;state = STAT_IN_WORD;}break;}case STAT_IN_WORD:{if(!IS_WORD_CHAR(*p)){count++;*p = '\0';on_word(ctx, word);state = STAT_OUT_WORD;}break;}case STAT_OUT_WORD:{if(IS_WORD_CHAR(*p)){word = p;state = STAT_IN_WORD;}break;}default:break;}}if(state == STAT_IN_WORD){count++;on_word(ctx, word);}free(copy_text);return count;}


代码第42行,将*p='\0',但循环并不会因此结束,因为先进行了p++调整。

转载请标明出处,仅供学习交流,勿用于商业目的

Copyright @ http://blog.csdn.net/tandesir

读书人网 >编程

热点推荐