static是“静态”的意思;
static关键字在C语言中可以用来修饰变量和函数;
1.修饰变量;
(1)static修饰的全局变量叫做静态全局变量,它的作用域是当前源文件,在其它文件中即使是使用“extern”关键字也不能引用;静态全局变量在定义时如果不赋初值,会默认初始化为0(只在编译完成后初始化一次),存在于内存分区中的静态区;
(2)static修饰的局部变量叫做静态局部变量,它的作用域是在当前函数(或者说是局部代码段),静态局部变量在定义时如果不赋初值,会默认初始化为0(只在编译完成后初始化一次),存在于内存分区中的静态区;
2.修饰函数;
static修饰函数表示函数的作用域只在当前文件中,一般用于不想将函数对外开放,只将其用于在当前文件中实现其他函数所用的情况;
3.补充;
刚才在说static修饰变量时,说了内存分区中的静态区,静态区是用于存储静态变量(静态全局变量和静态局部变量)和普通全局变量(没有被static和const修饰的)的,下面说一下其他的分区(简单来说有4大内存分区);
常量区:存放字符串常量和被“const”修饰的全局变量,这些变量都是常规手段下不可改变的;生命周期一直到程序结束,由操作系统进行回收;
静态区:存放全局变量和static变量,这些变量只初始化一次(在编译完成之后);生命周期一直到程序结束,由操作系统进行回收;
栈区:存放局部变量,这些变量的生命周期比较短,由操作系统进行分配并回收;注意局部变量在定义时,如果没有进行赋初值,那它将会是一个随机值(即上次这块内存使用完被操作系统释放之前的值);
堆区:堆区由操作系统维护,但是由程序员进行分配和使用的,用malloc函数向操作系统进行申请,使用完毕后,用free函数进行释放;如果程序员在使用完毕后,没有进行释放,那就会造成内存泄漏,一直到程序结束后,操作系统会对没有释放的堆区内存进行回收;注意堆区的内存在申请成功之后,初始值为0;
以上详细介绍了static关键字和C语言中各类变量类型对应的内存分区,我也是一名小白,关于内存分区,个人感觉在初学C语言时,理解困难很正常,等到C语言基础知识都过一遍再回过头来理解就好多了;
本人小白,有错误还请老师指出来,感激不尽;支持转载,也请注明出处;
Try harder,you can do this!