## 【我解C语言面试题系列】002 局部变量和全局变量小结?
**局部变量和全局变量小结**
**局部变量**
局部变量也称为内部变量。局部变量是在函数内作定义说明的。**其作用域仅限于函数内部**,离开该函数后再使用这种变量是非法的。
局部变量从存储方式上可分为动态(auto)存储类型和静态(static)存储类型。
动态存储类型的局部变量都是动态的分配存储空间,数据存储在动态存储区(栈)中。函数调用结束后自动释放,生存期是在声明该变量的函数执行过程。
静态存储类型的局部变量则是静态的分配存储空间,数据存储在静态存储区中。在程序整个运行期间都不释放,生存期贯穿于程序运行的整个过程。
函数中的局部变量,如不专门声明为static存储类别,默认都是动态地分配存储空间的,我们在平时的声明变量的过程中auto都是默认省略的。
**全局变量**
全局变量也称为外部变量,是在函数的外部定义的,它的**作用域为从变量定义处开始,到本程序文件的末尾**。全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放;
如果外部变量不在文件的开头定义,**其有效作用域只限于定义处到文件终**。
如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量作“外部变量声明”。表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。**其有效作用域就被拓展到从这个文件**extern**声明处到文件结束**。
如果在全局变量声明的时候,前面加上关键字static,那么其他文件就不能再访问和使用该变量,**其有效作用域只限于定义处到文件终**。
**局部变量能否和全局变量重名**
局部变量能和全局变量重名,但是局部变量会屏蔽全局变量。在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
PS:**这对**extern**声明的全局变量也一样**。