局部变量的三种类型auto,static和register
一:auto类型的变量
auto类型的变量也称作自动型变量,自动型变量是在动态存储去内分配单元,函数返回的时候,编译系统会
释放这些存储单元
,就是说当函数调用结束后,自动类型变量就会
不复存在
。
在c语言中我们可能很少见到auto这个关键字,原因是当我们没有
显式(例如static int i=0;)
的指定局部变量的存储类型的时候,系统就会
默认
变量是自动型变量,所以我们根本不用去特意的写上auto这个关键字。
二:静态类static
用static这个关键字修饰之后的局部变量,是存储在
静态区
的,也就是说当我们想要保留一个局部变量
,而不是像auto型那样出了函数之后就销毁的时候,我们就可以在定义变量的时候用static这个关键字来修饰变量。
静态局部变量只在第一次定义的时候赋初值,如果在定义的时候
没有赋值
的话
默认赋值为0或者'\0'(根据实型还是字符型)。
三:寄存器变量
register
一般情况下变量是存储在内存中的,当要使用变量进行运算的时候,控制器就会发出指令将内存中的该变量送到运算器中,这样就有一个问题:当我们频繁的使用这个变量的时候,多次的拿取就会造成效率的下降,所以就有了寄存器这种东西。
寄存器是在运算器中,寄存器变量参与运算的时候不用在内存中存取,这样就
提高了执行的效率
。
但是,寄存器的大小是
有限
的,不能无限的定义寄存器变量,当
寄存器大小不足
的时候,即使使用了
register这个关键字该变量也不会存储到寄存器中
。
总的来说,寄存器变量就是适合那种多次的频繁使用的变量,用于
提高运算的效率
。