全局变量:
1.定义在函数外部的变量,作用域是从声明开始到文件结尾。所有构成源程序的源文件和都文件都可见
2.生命周期,编译时就产生,直到源程序结束
3。程序存储在进程的虚拟地址空间中静态存储区(全局变量区),在程序编译期间就就分配空间。在程序开始执行过程中给全局变量分配空间,程序执行完毕就释放空间。程序执行过程中固定的分配空间,而不需要动态进行分配是释放。
4.函数体外初始化一次,不可进行赋值。否则会报错。
局部变量
定义在函数内部,作用域是该函数体内。生命周期随函数栈帧,栈帧销毁,局部变量失效,再引用该变量名就会失效。**
main函数也是函数,在mian函数的 变量也是局部变量
- 函数形参也是局部变量,实参传给形参,实际是一个赋值过程。
- 在语句块(由一对{}包含的若干条语句)中也可以定义变量,它的作用域只限于当前的语句块。
static修饰全局变量与普通全局变量有何区别
在全局变量前面加上stattic关键字,该变量就成了静态全局变量
- 不改变全局变量的作用域(依旧从声明到文件结束)和存储方式,依然存储在静态存储区
statc修饰的全局变量就会对外文件隐藏掉源文件中修饰的全局变量,这样可以减少命名冲突。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
static全局变量只初使化一次,防止在其他文件单元中被引用
、
static和局部变量和普通局部变量有何区别
在局部变量前面加上static关键字,该变量就成了静态局部变量
- 改变局部变量的存储位置,普通局部变量存储在堆栈中,加上static后,该变量被存储在静态
static修饰函数和普通函数区别