局部变量和全局变量
局部变量
局部变量根据定义形式的不同,又分为如下三种。
1.形参:在定义函数签名时定义的变量,形参的作用域实在整个函数内有效。
2.函数局部变量:在函数体内定义的局部变量,它的作用域是从定义该变量到函数结束。
3.代码块局部变量:在代码块中定义的局部变量,这个局部变量的作用域是从定义到该代码块结束。
全局变量
在一个函数内部,如果全局变量和局部变量同名,那么局部变量将会覆盖全局变量,意味着在该函数内部,全局变量会失效。
如果在源程序的结尾部分定义全局变量,又希望在前面的各函数中使用的这些全局变量,这就需要在这些函数中
声明全局变量。声明全局变量使用extern关键字,语法格式如下:
extern 类型 全局变量名;
外部全局变量与内部全局变量
事实上,C语言允许访问其他源程序中定义的全局变量,允许被其他源程序访问的全局变量被称为外部全局变量。
如果希望全局变量的作用域限制在该源程序内部,则可使用static修饰该全局变量,这样就可以避免其他源程
序访问或修改该全局变量。这样的全局变量被称为内部全局变量。
动态存储与静态存储
动态存储:程序在运行期间根据需要动态分配内存的存储方式。
静态存储:程序在运行开始就分配固定内存的存储方式。
静态存储区会存放如下两类变量
1.全局变量:无论是内部全局变量,还是外部全局变量,他们都被保存在静态存储区内。
2.static修饰的局部变量。
动态存储区主要存放如下三类变量
1.函数的形参变量。
2.非static修饰的局部变量。
3.函数执行的现场数据以及返回地址等。
为了指定变量的存储类别,可以在定义变量时指定存储类别。C语言支持如下几种存储类别
auto:指定该变量采用自动存储机制。局部变量默认采用这种存储机制。
static:指定将局部变量存放到静态存储区。这样该变量所占用的空间将会一直保存,知道程序退出。
register:指定将该变量存放到寄存器内。
extern:用于声明外部变量。
网友评论