Chinaunix首页 | 论坛 | 博客
  • 博客访问: 830481
  • 博文数量: 137
  • 博客积分: 3477
  • 博客等级: 中校
  • 技术积分: 1409
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-30 21:53
文章分类

全部博文(137)

文章存档

2024年(8)

2023年(10)

2022年(4)

2021年(10)

2020年(9)

2018年(1)

2017年(1)

2014年(4)

2013年(3)

2012年(12)

2011年(24)

2010年(2)

2009年(8)

2008年(6)

2007年(34)

2006年(1)

分类: C/C++

2010-04-22 13:28:45

我们用如下两段代码来详细讲解与说明:

代码一

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main ( void )
{
        int i;


        for ( i = 0 ; i < 3 ; i++)
        fprintf(stdout,"%d\n",test(i));

        return 0;
}

int test(int i)
{
        static int l = 5;

        l += 1;

        return l+i;
}


此段代码编译后执行的结果如下:

6
8
10

我们再来看如下代码:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main ( void )
{
        int i;


        for ( i = 0 ; i < 3 ; i++)
        fprintf(stdout,"%d\n",test(i));

        return 0;
}

int test(int i)
{
        int l = 5;

        l += 1;

        return l+i;
}


这段代码编译hou执行的结果是:

6
7
8
为啥会出现如此情况呢?

其实就在于 static 关键字,它使得第一段代码在两次调用 test 函数时, l 的值保留为前此执行后的结果.

这里面需要注意的是: 尽管 static int l = 5; 在申明这个变量时就已经对其进行了赋值,但由于第二次调用 test 时,该变量并没有第二次申明,因此紧随其后的 l = 5 ; 的语句在第二次调用时并没有被执行,为了更好的说明上面的问题,我们再来看如下的第三段代码:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main ( void )
{
        int i;


        for ( i = 0 ; i < 3 ; i++)
        fprintf(stdout,"%d\n",test(i));

        return 0;
}

int test(int i)
{
        static int l;

        l = 5 ;

        l += 1;

        return l+i;
}


编译后执行的结果如下:
6
7
8


这第三段代码与第一段代码的不同之处在于:对 l 的赋值不是在申明时赋值,而是在申明以后赋值的.

由此我们可以得出结论:

带有 static 关键字的变量申明,当第二次被调用的时候,其变量不会被再次申明,包括同时执行的赋值操作也同样不会被执行.


阅读(1352) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~