C语言之旅(7)关键字static的作用

来源:互联网 发布:python mkdtemp 编辑:程序博客网 时间:2024/06/05 10:09

首先在再说这个知识点之前,我先补充一个知识点。那就是文件作用域。

什么是文件作用域:简而言之就是你声明的变量或者函数只在本源文件中可见。外部文件是无法识别的。

static有三个重要的作用:1.声明静态全局变量;2.声明静态局部变量;3.声明静态函数。

static就是一个文件作用域的关键字。

1.静态全局变量:我们知道对于全局变量个静态变量存储的地点都是全局(静态)区。但是全局变量对于整个解决方案都是可见的,大家知道,在我门写项目的时候不只是会创建一个.c文件,会创建很多.c文件。然后在统一编译链接生成最后的可执行文件。打个比方就是你在1.c文件中声明一个变量int a;那么在2.c文件(同一个工程中)中也是可以使用的。但是如果这个变量前面加上了static,那么这个变量对于除本源文件之外的任何文件都是隐藏的。所以即使你在别的文件中再次定义一个同样名字的变量也是没有关系的。因为那个static全局变量已经心有所属了。

我们知道不管是全局变量也好还是静态变量也好,他们的存储区域都是全局(静态)区,在这个区域的变量会被初始化一次,而且初始化的数值是0。(如果没有被用户初始化的情况下,如果我们初始化的话,以我们初始化的为准)

2.静态局部变量:静态局部变量与普通的局部变量的区别有三个:

(1).位置:静态局部变量的存储位置是全局(静态)区,它的生命周期是整个程序的运行阶段。

(2).访问权限:静态局部变量只能被它所从属 的作用域访问,也就是说它只对本作用域(例如函数内部)的变量和函数显现,对于作用域外部的区域是隐藏的。

(3).值:对于数值的话,如果我们没有初始化的话,编译器会自动的初始化为0,即使他在函数中定义的话,即使我们以后再次调用这个函数,程序也不会走这个声明初始化步骤,会直接跳过去,读取的数值会是上次修改的数值,存在于整个程序的运行阶段。

3.静态函数:比如你的工程中有很多个源文件,但是某一个源文件的函数你并不想别的源文件访问的话,这个时候你只需要你在这个函数的前面加一个static即可,这个时候这个函数的作用域就是文件作用域,除了你的本源件能访问这个函数外,对于其余的源文件都是隐藏的。

如果感兴趣的人可以自己做实验,我就不举例了。希望大家多多批评,共同进步。


原创粉丝点击