C 语言中的每一个变量和函数有两个属性:数据类型和数据的存储类别。数据类型(整形、字符型等),存储类别是指数据在内存中存储的方法,存储方法有两大类: 静态存储类和动态存储类。具体包括四种:自动的(auto),静态的(static),寄存器的(register)和外部的(extern)。
auto 变量:函数中的局部变量,如不专门声明static,一般都是动态地分配存储空间。自动变量:在调用该函数时系统会给他们分配存储空间,一旦函数调用结束 这些存储空间就会自动释放。关键字“auto”可以省略,不写则隐含确定为“自动存储类别”,属于动态存储方式。
static声明变量:用static声明的静态局部变量,在函数调用结束后不消失,反而保留当前的数据,在下一次该函数调用时,该变量现有的值就是上一次函数调用结束时的值。
一般用static声明一个变量的作用有二:(1)对局部变量用static声明,则为该变量分配的空间在整个程序执行期间始终存在。(2)对全部变量用static声明,则该变量的作用域只限于本文件模块,即被声明的文件中。static还可以声明函数,eg:static int fun(int a, int b)称fun为内部函数,或者静态函数。内部函数的使用只限于所在文件,而且不同文件中的同名内部函数互不干扰。
下面的register变量经常听说,就是不知道怎么用,后来经过查找才知道原来是这么回事!
register 变量:一般变量的值都是存储在内存中,(当程序需要用到哪一个变量的值,由控制器发出指令将内存中该变量的值送到运算器,完了如果需要存数,再从运算器将 数据送到内存中存放。)所以就引出一个问题,如果我们进行一段频繁的运算,则存储变量的值肯定要花费不少时间,所以C语言允许将局部变量的值存放在寄存器 中,这样需要时就直接搬用,不必再进行过内存。提高运算速度。
extern声明外部变量:外部变量(即全局变量)是在函数的外部定义的。作用域为从变量的定义处开始,到本程序文件的结尾。