2013年9月27日16:09:56
变量属性小结:
1. 一个变量除了数据类型外,还有三种属性:作用域;存储期;存储类别。
2. 作用域(空间角度)
作用域:每一个变量都有其有效的作用范围,这就是变量的作用域。
在作用域以外是不能访问这些变量的。
作用域:局部变量(1在函数内部定义的,或形式参数---有效范围为函数内部,即函数作用域)
(2 在复合语句中定义的,有效范围为复合语句内部,即块作用域)
(3 函数原型声明中,函数原型作用域)
全局变量(在函数外定义的变量,有效范围从定义变量的位置开始到本源文件结束,即文件作用域)
3. 存储期(生命期,存在的时间)
存储方法分两大类:
静态存储:是在整个程序运行期间都存在
全局变量;静态全局变量;静态局部变量
动态存储:是在调用函数时临时分配存储单元
自动变量;寄存器变量;形式参数;
4. 存储类别
存储类别:数据在内存中存储的方法。
有4种:自动的(auto),静态的(static),寄存器的(register),外部的(extern)
5. 按照变量值存放的位置来分:
内存中静态存储区:全局变量;静态全局变量;静态局部变量
内存中动态存储区:自动变量;形式参数;
CPU中的寄存器:寄存器变量
6. 变量的类型总结
自动变量:即局部自动变量,局部有效(函数内,复合语句内,函数原型声明中),动态存储区
静态局部变量:static+自动变量,局部有效(同上),静态存储区
(虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的)
寄存器变量:register+自动变量
用extern声明全局变量:(extern只是用来声明已经定义的全局变量,而不能用于变量的定义)
作用:用extern声明全局变量,来扩展全局变量的作用域
在一个文件内用extern声明,扩展全局变量的作用域到声明处开始(一般是不这样处理的,一般都是把全局变量的定义在引用它的所有的函数之前)。
在多个文件中用extern声明,从程序连接时从其他文件找已经定义的全局变量。
用static声明的全局变量:(与上一种情况中多文件用extern声明相对立)
作用:希望全局变量只限于被本文件引用,而不能被其他文件引用(有利于工程,每个人独立的设计,互不干扰,模块化)。
7. 内部函数和外部函数
内部函数:如果一个函数只能被本文件中其他函数所调用,它称之为内部函数。
static 类型标识符 函数名(形参表) static int func(int a, int b)
外部函数:如果在函数首部的最左端冠以关键字extern,则表示此函数是外部函数,可供其它函数调用。
(如果定义函数时省略extern,则默认为外部函数)
(在需要调用此函数的文件中,用extern声明所用的函数是外部函数)