怎么看for循环和有静态变量的一个例子

#include<stdio.h>

int sum(int a)//第一步看:sum是个函数,它有一个整型参数int a,从这一行直接看第二步即main函数了

{

        int c = 0;
        static int b = 3;
        c += 1;
        b += 2;
        return (a + b + c);
}
int main()//第二步看:main函数内部(代码块内)
{
        int i;
        int a = 2;//创建了i、a
        for (i = 0; i < 5; i++)//for循环,循环了5次
        {
               printf("%d,", sum(a));//每一次循环就会调用sum函数,sum函数调用完之后产生的结果通过%d的形式打印。

        }//那按着这个循环5次的话,这儿应该打印5次,那每次打印的数字分别是什么呢?即调用每次sum返回的值是什么?

        从进入for循环i=0时第一次上去调用sum,sum圆括号中是2,即sum传进来的是a,a是2,所以把2传过去了。走到int sum(int a)行,这个地方的a就是2,

        紧接着创建了c,是0,static int b = 3这里的b是创建的静态的变量,值是3,(静态的变量的特点是:静态局部变量出了它的范围,即出了它所在的代码块,就是函数调用结束时3是不会销毁的),然后c+1,b+2,a+b+c=2+5+1=8,return 8就把8返回去了,所以第一次打印的结果是8

        第一次函数调用时执行完return即出了代码块就是跳出去了,因为c,a二者是局部变量,并没有被static修饰,所以这两个变量出了它们的范围就销毁了不在了,static修饰的变量b,它出了范围不销毁,意味着下次进入它范围时它还在,还保留着5。

        第一次打印完,再上去(在for循环中)执行i++,i=1<5,再进入for循环,即进入printf()函数中,又要调用sum函数(),所以再上去调用,进入int sum(int a),这次调用又传了a过去,此时传的a还是2,c是局部变量,每次进来都要重新创建,因为上次走之后它销毁了,所以这次重新创建,c是0,static b因为b上次出去之后没有被销毁,所以它没有新创建,还是原来的b,为5,c是刚创建的0,+1后是1,b是5,+=2后变成7,a+b+c=2+7+1=10,return 10返回时就把10带回printf()函数中了,即打印10。出这次sum()函数时还是一样的道理,a和c会销毁,因为出它们的范围(作用域)了,生命周期就结束了。但是b还会保留上次刚刚留下来的值,是7,b不销毁。所以下次进入时a和b分别又是2和0,只有b在增长2。

        所以推算的结果是:8,10,12,14,16

        /*return 0;*/

}//8,10,12,14,16,

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值