题目
学习static定义静态变量的用法
问题分析
静态局部变量(static)作用:在其所在的函数调用结束后,该变量仍然存在,保存其值。
static int c,d ; //声明整型变量c,d是静态局部变量
静态局部变量与动态局部的区别:
①静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,分配在动态存储区空间而不在静态存储区空间,函数调用结束后立即释放。
②对静态局部变量的初始化是在编译时进行赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用该函数时不再重新赋初值而只是保留上次函数调用结束时的值。而对自动变量赋初值,不是在编译时进行的,而是在函数调用时进行的,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
③如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符' \0 '(对字符变量)。而对自动变量来说,它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的内容是不可知的。
④虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的。因为它是局部变量,只能被本函数引用,而不能被其他函数引用。
代码
#include <stdio.h>
void function()
{
int n = 0;
static int static_n = 0;
printf("n: %d \n", n);
printf("static n : %d \n", static_n);
printf("\n");
n++;
static_n++;
}
void main()
{
int i;
for (i = 0;i < 3;i++)
function();
}
运行结果
分析
可以发现n的值每次都是0,而静态局部变量static_c的值在递增,说明在函数调用结束后该变量的存储单元并没有被释放,仍然存在,保存其值。