在C语言中,对变量的存储类型说明有以下四种:
auto 自动变量
register 寄存器变量
extern 外部变量
static 静态变量
自动(auto)变量
auto 自动变量
register 寄存器变量
extern 外部变量
static 静态变量
自动变量和寄存器变量属于动态存储方式,外部变量和静态变量属于静态存储方式。
按作用域又可分为全局变量和局部变量
自动(auto)变量
C语言规定, 函数内凡未加存储类型说明的变量均视为自动变量, 也就是说自动变量可省去说明符auto
作用域和生存期都局限于定义它的个体内( 函数或复合语句内),我当初理解就是最内层包含它的花括号内。
需要注意的是,变量从声明开始就是可见的了。
举例:
#include<stdio.h>
int i=1;
int main(){
int i=i;
printf("%d",i);
}
这段程序的输出其实并不是1,而是不确定的,i从声明开始就可见了,在作用域了,它遮盖了全局变量。
寄存器(register)变量
上述各类变量都存放在存储器内, 因此当对一个变量频繁读写时,必须要反复访问内存储器,从而花费大量的存取时间。 为此,C语言提供了另一种变量,即寄存器变量。
这种变量存放在CPU的寄存器中,使用时,不需要访问内存,而直接从寄存器中读写, 这样可提高效率。寄存器变量的说明符是register。
对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量。