函数(六)(局部变量与全局变量)

2022-04-11 17:59:33 浏览数 (1)

局部变量与全局变量

一般来说,C语言程序中可以在程序中以下地方定义变量:

(1) 函数体的开头部分。

(2) 函数头部中的形式参数变量。

(3) 函数体内部的复合语句中。

(4) 函数的外部。

根据变量在程序中定义位置,可以将变量分为“局部变量”和“全局变量”

在函数内部定义的变量称为局部变量。函数体开头部分、函数头中的形式参数和函数体内复合语句中定义的变量都属于局部变量。

局部变量的作用域是从该变量的定义语句开始到包含该变量定义语句的最内层的右大括号结束为止。

源程序文件中在函数外部定义的变量称为全局变量,全局变量作用域的起点是变量定义的位置,全局变量作用域的终点中其所在的源程序文件的结束。

变量的存储方式

C语言中,供用户程序运行使用的内存空间分为三个部分:程序区、静态存储区和动态存储区。

(1) 程序区存放可执行的程序指令。

(2) 静态存储区存放程序运行期间占用固定内存单元的变量,包括程序中定义的全局变量、静态局部变量(static)等。

(3) 动态存储区存放程序运行期间根据需要动态分配存储单元的变量,包括程序中定义的非static的局部变量、函数的形式参数等。

C语言中变量的存储类别具体可以分为4种:自动(auto)、静态(static)、寄存器(register)和外部(extern)。

局部变量的存储类别

局部变量有三种存储类型:自动(auto)、静态(static)和寄存器(register)。

1. 自动局部变量

函数中的局部变量,如果没有特别声明为static(静态)存储类别,都是由系统动态地分配和释放内存空间,变量存放在动态存储区中,称为自动变量。函数中的形参也属于自动变量。

2. 静态局部变量

如果希望函数中局部变量的值在函数调用结束后仍然保留原来的值,即系统不释放变量占用的内存空间,在下一次函数调用时,该变量保持上一次函数调用结束后的值。此时应该使用static关键字把局部变量说明成静态存储方式。

3. 寄存器变量

一般情况下,变量存放在内存空间中,当程序中使用变量时,由控制器发出的指令把数据从内存中变量的值送到运算器,经过运算器产生的结果,如果需要保存,再从运算器送到内存。如果程序中某些变量使用非常频繁,那么数据的内存访问的时间就会影响程序运行的效率。

C语言允许将使用频繁的变量存放在寄存器中,以提高程序的运行效率。

全局变量的存储类别

全局变量是存放在静态存储区的,它们的生命期是固定的,是程序运行的整个过程。全局变量主要有2种存储类别:外部(extern)和静态(static)。

1. 外部全局变量

如果要在一个源程序文件中使用其它源程序文件中定义的全局变量,则需要使用关键字extern说明。

备注:是使用已定义的全局变量,而不是定义新的全局变量,具体见书P135示例。

2. 静态全局变量

程序设计中如果希望某个源程序文件中定义的全局变量只能在本文件中使用,不能在其它源程序中使用,则可以在定义全局变量时加上static关键字说明。

0 人点赞