帮我分析这个C语言的结果(关于static的基本用法)

来源:百度知道 编辑:UC知道 时间:2024/05/21 13:17:04
#include <stdio.h>
void fun (int k);
int main (void)
{ int k;
for (k = 1; k <= 3; k++)
fun (k);
return 0;
}
void fun(int k)
{
static int a; //静态变量的初值为0

printf ("%d, ", a);
a += k ;
}
结果为什么是0,1,3

如果方程 void fun(int k) 定义为:
void fun(int k)
{
int a; //即去掉 static
}
结果为 0,0,0。

呵呵,说多了怕我自己也糊涂。最简单的解释就是:
int a 是local variable. 它的寿命很短。每一次方程fun被呼叫的时候,它会被建立在内存上。而当方程中所有的指令结束后,变量a就被从内存中抹杀掉了。下一次循环中,一个全新的变量A将被建立。它的default value 还是0。
而 static int a 是 static variable.它的寿命很长。当主程序main运行时,它即被创建。而且只被创建一次。它不会被抹杀,直到主程序MAIN 结束。所以它记的住以前的VALUE, 即 a = 0; a = 0+1; a= 1+ 2;