您的位置:首页 > 编程语言 > C语言/C++

static 关键字的用法(c语言)

2016-06-13 00:03 363 查看
一、两个重要作用:

1.修饰变量

(1)作用域:

a.静态全局变量:仅限于变量被定义的文件,从定义处开始到文件结尾处结束。(其他文件即使用extern声明也无法使用)要想在定义之前使用它,就必须在之前加extern ***语句。

b.静态局部变量:仅在定义变量的局部作用域内。

(2)生命周期:整个程序的存在周期。

(3)存储空间:静态区

(4)只被初始化一次

下面,来看看下面这段程序,测测你对这个到底理解了多少呢?

<span style="font-size:14px;">#include <stdio.h>
#include <stdlib.h>

void fun()
{
static int i = 0;
printf("%d ", ++i);
}
int main()
{
int j = 0;
for(j = 0; j < 10; j++)
{
fun();
}
system("pause");
return 0;
}</span>


上面这段程序的输出结果是什么呢?

因为静态变量只被初始化一次,所以这段程序的结果应该是:1 2 3 4 5 6 7 8 9 10

那么,下面这段代码的输出结果又是什么呢?

#include <stdio.h>
#include <stdlib.h>
static int i = 0;
void fun()
{
i = 10;
printf("%d ", ++i);
}
int main()
{
int j = 0;
for(j = 0; j < 10; j++)
{
fun();
}
system("pause");
return 0;
}

输出结果是什么呢???代码有木有和上面很像。然而结果却是截然不同的,这个程序输出10个11。为什么呢?i只被初始化一次,但它可以被多次赋值哦。

2.修饰函数 -->静态函数

改变了函数的作用域:使函数的作用域局限于本文件(又称内部函数),好处是:不同的人编写函数时,不用担心自己定义的函数与其他文件的函数同名。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: