C语言中的属性关键字

C语言里的变量可以有自己的属性,主要有auto,static,register。

auto即C语言中局部变量的默认属性,编译器默认所有的局部变量都是auto,在栈上分配空间,不能把全局变量声明为auto。

static关键字指明变量的静态属性,同时具有作用域限定符的意义。

其修饰的局部变量存储在程序静态区,修饰的全局变量作用域函数作用域只是声明的文件中,别的文件不能访问。

register关键字指明将变量存储于寄存器中,只是请求寄存器变量,不一定能请求成功。

如果一个变量被register来修辞,就意味着,该变量会作为一个寄存器变量,让该变量的访问速度达到最快。

使用register关键字时,注意:其只能修饰局部变量,不能修饰全局变量,不能修饰函数。register变量必须是CPU寄存器可以接受的值,这通常意味着register变量必须是一个单个的值,并且长度应该小于或者等于整型的长度,且不能用取地址符号&对其求取地址。


给出如下代码:

#include 

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关键字修饰的局部变量只会被初始化一次。虽然其作用域仅限于所在函数内部,但是其在整个程序的运行期一直存在。

你可能感兴趣的:(linux,C)