for语句剖析

 在编写程序中,通常都会用用到For循环,那么到底For语句是如何执行的?

当然,有一定编程经验的人都会知道,for语句是一个实现循环执行的程序块,for结构一般大致如:

    for(表达式1;表达式2;表达式3)语句;

或者

    for(表达式1;表达式2;表达式3){

          语句块;

}

其中,表达1一般是用于变量的初始化;表达式2主要是用于控制循环,如果表达式2的计算结果是true,则继续执行循环体,否则结束循环;表达式3一般用于变量的自增运算;

例如,简单的输出1到10的。程序为:

for(int i=1; i<=10; i++)  printf("%d",i);

在上面的程序中,在执行for(int i=1; i<=10; i++) 括号里边的表达式时,表达1、2、3到底执行了吗?或者说执行情况怎么样?

下面看一个例子程序:

int x = 10; int y = 10; int i = 10;
 for(i=0;x>8;y=i++){
       printf("%d,%d,%d\n",x-- , i , y);
 }

执行结果为:

10,0,10

9,1,0

 显然,第一行结果中可见,i ==0,已经执行;x>8已经执行,才输出结果;但y==10,并没有执行y=i++。第二行结果,才显示出i==1,y==0。

 

其实从for(int i=1; i<=10; i++)  printf("%d",i);的运行结果中,输出1,2,3,……,10;比如第一次循环时,输出i==1,可见表达式3i++,根本还没执行。

 

问题解因:

for循环语句的真正执行过程为:

1)先求解表达式1;

2)求解表达式2,若结果为真,则执行循环体的语句或语句块,否则结束循环;

3)求解表达式3;

4)跳回到步骤2)步骤继续执行;

5)循环结束,执行for语句之后的语句。

 

由上述,表达式3是在执行循环体语句或语句块后,才得以执行的,这是为什么例子程序不执行y=i++的原因。

转载于:https://www.cnblogs.com/sl-shilong/archive/2012/11/20/2779810.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值