先写一个正常循环程序 运行结果是显而易见的:
在while的循环语句中,test()每一轮都会销毁上一轮得到的a的值,并重新为a赋值,因此输出结果应为连续的5个a=2;
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void test()
{
int a = 1;
a++;
printf("a=%d\n", a);
}
int main()
{
int i= 0;
while (i < 5)
{
test();
i++;//打印结果应该是五个a=2,因为每次循环第一步都是将a赋值为1;
} //a每经过一次生命循环都会因为局部变量的赋值而重置
//死了5次都以1的值复活
return 0;
}
那么接下来我们试试在int a=1前面加上static,这样a就是一个静态的局部变量
注意静态的意思:
1)内存中的位置:静态存储区
(2)初始化:未经初始化的局部静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
(3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。
形象的来说就是a在每个生命周期都不会死亡,而是会继续延续上一轮的值
因此输出结果就会是a=2,a=3,a=4,a=5,a=6
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//加入static后
void test()
{
static int a = 1;//尝试在定义前面加上static
a++; //这样a就是一个静态的局部变量
printf("a=%d\n", a);
}
int main()
{
int i = 0;
while (i < 5)
{
test();//这样a就可以打出2,3,4,5,6了,说明a并没有被销毁,保存上次使用过的值
i++;
}
return 0;
}
如有问题,欢迎指正