static
在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数
一、定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量。 全局静态变量有以下特点:
(1)在全局数据区内分配内存
(2)如果没有初始化,其默认值为0
(3)该变量在本文件内从定义开始到文件结束可见(这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。)
二、 定义局部静态变量:在局部静态变量前面加上关键字static,该局部变量便成了静态局部变量。静态局部变量有以下特点:
(1)该变量在全局数据区分配内存
(2)如果不显示初始化,那么将被隐式初始化为0,若初始化,则static修饰的静态局部变量只初始化一次
(3)它始终驻留在全局数据区,直到程序运行结束,延长了局部变量的生命周期,直到程序运行结束以后才释放。
(4)其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。
三、定义静态函数:在函数的返回类型加上static关键字,函数即被定义成静态函数。静态函数有以下特点:
(1)静态函数只能在本源文件中使用
(2)在文件作用域中声明的inline函数默认为static
说明:静态函数只是一个普通的全局函数,只不过受static限制,他只能在文件坐在的编译单位内使用,不能呢个在其他编译单位内使用。
局部变量全局变量
区别:
(1)局部变量只在本函数范围有效,在此函数以外是不能使用这些变量;全局变量的有效范围是从定义变量的位置开始到本源文件结束。
(2)局部变量是程序运行到该函数时给该变量分配内存空间,函数结束则释放该内存空间;全局变量是程序运行时事先分配内存空间,当程序结束时释放内存。
重名问题:
可以重名,局部会屏蔽全局。C中无法使用全局变量。要用全局变量,需要使用 ::
并将编译器换成C++的。Demo: