一、auto关键字
在缺省情况下,编译默认的所有变量都是auto。
二、register关键字
使用该关键字是让编译器尽可能把变量存在CPU的内部寄存器中,而不是内存寻址访问,从而提高了效率。之所以说是尽可能,是因为CPU的寄存器是有限的,如果用register修饰的变量超过了CPU的寄存器,CPU也不能把全部的变量都放在寄存器中。那什么是寄存器?寄存器就是一块一块的存储空间,它能直接和CPU打交道,内存却不行,因此寄存器的存取速率要大于内存。
三、static关键字
1、static
修饰变量,包括全局变量和局部变量,且修饰的变量都是存在内存的静态存储区。
(1)、static
修饰全局变量:用static
修饰的全局变量只能在变量被定义的文件中使用,其它文件不能使用,而且在变量定义的地方前面的代码是不能使用该变量的,只有后面的代码才能使用。
(2)、static
修饰局部变量:用static修饰的局部变量是存储在静态存储区的,因此即使是函数运行结束,这个静态变量值也不会被销毁,函数下次使用时会继续使用该值。
#include <stdio.h>
#include <stdlib.h>
void test_fun1(void)
{
int value1 = 0;
value1++;
printf("value1:%d\n", value1);
}
void test_fun2(void)
{
static int value2 = 0;
value2++;
printf("value2:%d\n", value2);
}
void test_fun3(void)
{
int i = 0;
for (i=0; i<10; i++)
{
test_fun1();
test_fun2();
}
}
int main(void)
{
test_fun3();
return 0;
}
结果:
val