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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值