C语言里的变量可以有自己的属性,主要有auto,static,register。
auto即C语言中局部变量的默认属性,编译器默认所有的局部变量都是auto,在栈上分配空间,不能把全局变量声明为auto。
static关键字指明变量的静态属性,同时具有作用域限定符的意义。
其修饰的局部变量存储在程序静态区,修饰的全局变量作用域和函数作用域只是声明的文件中,别的文件不能访问。
register关键字指明将变量存储于寄存器中,只是请求寄存器变量,不一定能请求成功。
如果一个变量被register来修辞,就意味着,该变量会作为一个寄存器变量,让该变量的访问速度达到最快。
使用register关键字时,注意:其只能修饰局部变量,不能修饰全局变量,不能修饰函数。register变量必须是CPU寄存器可以接受的值,这通常意味着register变量必须是一个单个的值,并且长度应该小于或者等于整型的长度,且不能用取地址符号&对其求取地址。
给出如下代码:
#include <stdio.h>
void f1()
{
int i = 0;
i++;
printf("%d\n",i);
}
void f2()
{
static int i = 0;
i++;
printf("%d\n",i);
}
int main()
{
int j;
for(j = 0; j < 5; j++)
{
f1();
}
for(j = 0; j < 5; j++)
{
f2();
}
return 0;
}
得到结果为:
1
1
1
1
1
1
2
3
4
5
从而说明static关键字修饰的局部变量只会被初始化一次。虽然其作用域仅限于所在函数内部,但是其在整个程序的运行期一直存在。