C变量存储类型
C语言程序中可以选择变量的不同存储形式,存储类型分别为静态存储和动态存储。我们可以通过存储类修饰符来告诉编译器要处理什么样的类型变量,具体有以下4种:auto(自动)、static(静态)、register(寄存器)、extern(外部)。
1、auto变量
auto关键字是声明一个局部变量为自动的,这就意味每次执行到定义该变量的时候,都会产生一个新的变量,并且对其重新进行初始化。
1 #includeauto变量2 void fun() 3 { 4 auto int a=1; //定义auto整型变量 5 a=a+1; //变量加1 6 printf("%d \n",a); //显示结果 7 8 } 9 void main() 10 { 11 printf("第一次调用结果:"); 12 fun(); 13 printf("第二次调用结果:"); 14 fun(); 15 16 }
执行结果如下图:
2、static变量
static变量为静态变量,它与将函数的内部与外部声明成static变量的意义是不一样的。不过对于局部变量来说,static变量是和auto变量相对而言的。两者作用域仅限声明变量函数中,语句块执行期间,static变量将始终保持它的值。
1 #includestatic变量2 void fun () 3 { 4 static int a=1; //定义static整型变量 5 a=a+1; 6 printf("%d \n",a); 7 8 } 9 void main() 10 { 11 printf("第一次调用函数结果:"); 12 fun(); 13 printf("第二次调用函数结果:"); 14 fun(); 15 16 }
执行结果如下:
两次输出结果不同,由于fun()函数中的局部变量a的值在函数调用结束后不消失而保留原值,即占用的存储单元不释放,在第二次调用fun()函数时,该变量保留第一次函数调用结束时的值,所以结果不同。
3、register变量
register变量为寄存器变量。使用寄存器变量的目的是指定某个局部变量存放在计算机的某个硬件寄存器中而不是内存中,这样可以提高程序的运行速度。
1 #includeregister2 void main() 3 { 4 register int a;//定义寄存器整型变量 5 a=200; 6 printf("%d \n",a); 7 8 9 }
执行结果如下: