前一段时间看到论坛里有网友谈到static的问题,今天专门拿出课本看了看,顺便整理一下。
一、关于局部变量全局变量及其应用在此就不多说了,关于变量类型简单介绍一下:
一个数据变量有两种属性:数据类型,存储类别。按存储方式又分为:动态存储类型,静态存储类型,具体包括4种:自动的(auto)、静态的(static)、寄存器的(register)、外部的。静态存储类型又牵扯到作用域和生存期。
二、关于auto类型,一般未做特殊定义的都默认为此类型,寄存器类型很少用到,了解即可,剩下的两种需要认真掌握,具体说明如下:
1、用static声明静态变量的说明:
A、 Static将变量定义/声明为静态变量,存储在静态存储区,此变量的值在函数调用结束后不消失而保留原值,即其占用的内存单元不释放,在下一次调用该函数时,该变量已有值,静态变量在编译时赋初值,以后每次调用不再重新赋值。
B、如果在定义静态变量时不赋初值,编译时自动赋值0(对数值型变量)或空字符(对字符变量)。而对于自动变量来说,如未赋初值的话,其值是不确定的,这是由于每次重新调用时其存储单元是重新另分配的,而所分配的存储单元中的值是不确定的。
C、静态变量仅能被声明/定义他的函数/文件引用,即便在其他函数或文件中做了全局声明(extern),也无法被其他函数所引用。
D、单纯的全局变量(非static定义)在其他函数或文件中经声明后可以轻松引用。
针对于函数也有相类似的情况。
2、用extern声明外部变量
外部变量经extern声明后,就可以从“声明”处起,合法的使用该外部变量,即其有效区域得到了扩展。
用extern声明外部变量的时候,类型名可以写也可以不写。例:extern int Num 等价于 extern Num.
如何在一个文件中引用另一个文件中定义的外部变量呢?
正确的做法是:在任一个文件中定义外部变量,而在要调用他的文件中用extern对此变量进行“外部变量声明”即可。{通常我们都是在头文件中进行声明处理的}
注:用这样的全局变量应十分谨慎,因为在一个文件中修改了该变量的值,在另一个文件中也会受到影响。在多任务模块编程时尽量少用或不用。
更多详细内容请参考《C程序设计》第八章相关内容,谢谢