1、auto变量:
函数中的局部变量,如不专门声明为static存储类别,都是动态分配存储空间的,数据存储在动态存储区。在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。这类局部变量称为自动变量。自动变量用关键字auto作存储类别的声明。如:
int f(int a)
{
auto int b,c=3
}
实际上,关键字auto可以省略,auto不写则隐含确定为”自动存储类别“,它属于动态存储方式。程序中大多数变量属于自动变量。
2、register变量
一般情况下,变量的值是存放在内存中的。当程序中用到哪一个变量的值时,由控制器发出指令将内存中该变量的值送到运算器中。经过运算器进行运算,如果需要存数,再从运算器将数送到内存存放。如果有一些变量使用频繁,则为存取变量的值要花不少时间。为提高执行效率,C语言允许将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。由于寄存器的存取速度远高于内存的存取速度,因此这样可以提高执行效率。这种变量叫做”寄存器变量“,用关键字register作声明。如:
int fac(int n)
{
register int i,f=1;
}
register变量的说明:
1)只有局部自动变量和形式参数可以作为寄存器变量,其他不行。
2)一个计算机系统中的寄存器数目是有限的,不能定义任意多个寄存器变量。不同的系统允许使用的寄存器是不同的,而且对register变量的处理方法也是不同的,有的系统对register变量当作自动变量处理,分配内存单元,并不真正把它们存放在寄存器中,有的系统只允许将int、char和指针型变量定义为寄存器变量。
3)局部静态变量不能定义为寄存器变量。如:register static int a;是错误。
4)当今的优化编译系统能够自动识别使用频繁的变量,从而自动地将这些变量放在寄存器中,而不需要程序设计者指定。因此在实际上用register声明变量是不必要的。