作用域与生存期(生命周期)
通过静态环境变量来理解这2个名词
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
int main()
{
myplus();
printf("Hello world!\n");
myplus();
return 0;
}
{
myplus();
printf("Hello world!\n");
myplus();
return 0;
}
void myplus()
{
static int i = 0;
i++;
printf("i=%d\n",i);
}
{
static int i = 0;
i++;
printf("i=%d\n",i);
}
解释:i是个myplus函数中的静态局部变量,一直存放在静态区,生命周期是整个程序。但是只能在myplus这个函数中才能改变这个变量的值。所以作用域只是在myplus这个函数中,外部是无法修改其中的值。
运行结果:
i=1
Hello world
i=2
如果将static 改为 auto
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
int main()
{
myplus();
printf("Hello world!\n");
myplus();
return 0;
}
{
myplus();
printf("Hello world!\n");
myplus();
return 0;
}
void myplus()
{
auto int i = 0;
i++;
printf("i=%d\n",i);
}
{
auto int i = 0;
i++;
printf("i=%d\n",i);
}
运行结果:
i=1
Hello world
i=1
解释:此时i变量的生命周期就是myplus函数调用,调用结束销毁i的空间生命结束,作用域就在myplus函数中。