【问题描述】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