我们用如下两段代码来详细讲解与说明:
代码一
#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) |