C语言的一个关键字——static
来源:互联网 发布:设计班徽用什么软件 编辑:程序博客网 时间:2024/05/29 06:46
C语言的一个关键字——static
Static在C语言里面有两个作用,第一个是修饰变量,第二个是修饰函数。
1、Static修饰变量
按照作用范围的不同,变量分为局部变量和全局变量。如果用static修饰变量,不论这个变量是全局的还是局部的都是存储在静态数据区。下面分开来讲:
¨ 如果用static修饰全局变量,我们称其为静态全局变量。
我们用static修饰全局变量的主要目的就是:使得其作用域仅限于变量被定义的文件中(即从变量定义处到本文件结尾处),其它文件不论通过什么方式都不能访问。
¨ 如果用static修饰局部变量,我们称其为静态局部变量。
我们用static修饰局部变量的目的主要有两个:
1) 在某个函数体里面定义的静态局部变量,只能在本函数体被访问,即使同一个文件的其它函数也访问不了。
2) 静态局部变量总存储在静态数据区,所以即使这个函数运行结束,这个静态局部变量的值不会被销毁,函数下次使用时仍然要用到这个值。
下面给出一个例程:
#include <stdio.h>
static int j; // 静态全局变量
int fun1(void)
{
static int i = 0;
i++;
return i;
}
int fun2(void)
{
j = 0;
j++;
return j;
}
int main(int argc, char *argv[])
{
int k = 0, m = 0, n = 0;
for(k=0; k<10; k++){
m = fun1( );
n = fun2( );
printf("%d,%d\n", m, n);
}
return 0;
}
结果:
1,1
2,1
3,1
4,1
5,1
6,1
7,1
8,1
9,1
10,1
从例程的运行结果可以看出:
对于fun1( ),运行一次之后,变量i保持了原来的数据,并没有销毁,而是在下一次调用的时候继续使用,所以才会有1、2、3…10这样的结果。而对于fun2( ),运行一次之后,变量j的值被销毁了,所以第二次调用结束j仍然保持原值“1”,所以循环十次,每次都是1
2、Static修饰函数
在函数前加static,则此函数成为静态函数(内部函数),我们用static修饰函数的主要目的是:用来表示不能被其它文件访问的一个函数(和用static修饰全局变量的目的一样,都是不允许其它文件访问)。这样一来便有一个好处:程序员不用担心自己编写的函数与其他文件的函数同名。
对局部静态变量的特别说明
(1)静态局部变量数据属于静态存储类别,在静态存储区内分配内存单元,在整个程序运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储区空间而不占用静态存储区空间,函数调用结束后立即释放空间。
(2)静态局部变量时在编译时被赋值的,即自始至终只赋值一次,在程序运行时它已经有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。而自动变量赋初值,不是在编译时进行的,而是在运行时进行,所以每调用一次函数就赋一次初值。
(3)如在定义局部变量时不赋初值,则对静态局部变量来说,编译时自动赋一个初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值,则它的值是一个不确定的值。这是由每次动态分配的内存单元不同所决定的。
- C语言的一个关键字——static
- C语言的一个关键字——static
- C语言的一个关键字——static
- C语言的一个关键字——static
- C语言的一个关键字——static
- C语言的一个关键字——static
- C语言的static关键字
- C语言的static关键字
- c语言关键字static
- c语言static关键字
- C语言关键字static
- C语言static关键字
- 关键字static(c语言)
- C语言-关键字static
- c语言关键字--static
- C语言 static 关键字
- C语言static关键字
- C语言 Static关键字
- struts2系列之1
- 程序员苦,java程序员更苦
- fprintf、printf、sprintf、fscanf、scanf、sscanf 格式化输入输出
- 关键字搜索
- 生成查询的模糊匹配字符串
- C语言的一个关键字——static
- 任务的合理调度 话题提出人:廖义林
- 翻译 项目管理艺术 3.1 揭开做软件项目计划的神秘面纱(上)
- 构件库 话题提出人:宋文鹏
- genexus 开发知识总结一
- 什么是ASP?
- 其余本次讨论话题未作总结,请大家补充
- 什么是Web2.0
- web.config文件详解