作用域
定义:变量并不总是可用的,而该变量在部分代码中可使用的范围即为变量的作用域。
1.局部变量
作用域:对于局部变量来说,作用域即为该变量所在的代码块中。
定义:一般在代码块中
例:
int main()
{
int a;
}
该代码中a的作用域即在main函数中可用。
int main()
{
int a=0;
{
printf("%d", a);
}
}
因为printf所在的代码块同样属于main中,所以在main函数中定义的a理所当然可用。
那此时便引出了一个问题
若在不同代码块中变量重名则结果为何
int main()
{
int a=0;
{
int a = 10;
printf("%d", a);
}
}
此时结果则为
这种原则就被称为就近原则,即变量被应用时会从最近的局部变量中去寻找,若无,则去全局变量中寻找
2.全局变量
作用域:整个工程
定义:在代码块之外
例:
int a;
int main()
{
;
}
此时a为全局变量。
若全局变量定义在其他项中,若想使用则需用到extern
在源2.c中的引用。
生命周期
定义:指变量从创建到被销毁的时间段,即在变量所在作用域执行结束时,变量被内存销毁释放,不再起作用,可知作用域与生命周期息息相关
1.全局变量
生命周期:全局变量针对整个工程,所以生命周期为整个程序
2.局部变量
生命周期:即局部变量所在的代码块开始执行变量的定义语句时,到代码块的运行结束。
例子
int main()
{
{
int a = 10;
}
printf("%d", a);
}
在这里插入代码片
即:a在所在代码块结束时,a被销毁,故无法在代码块外被引用
当然,也不是说局部变量也就只有被释放销毁等死的下场
当局部变量应用static时,局部变量变为静态局部变量,此时生命周期与与全局变量一致,不会在代码块的运行结束后被内存释放。
例:
#include<stdio.h>
int test(int l)
{
int a = 10;
a += 1;
int static b = 10;
b += 1;
return(a + b + l);
}
int main()
{
int g;
int p = 0;
for (int o = 1; o < 3; o++)
g=test(p);
printf("%d", g);
}
执行test函数时
b被static修饰,变为静态局部变量,在test代码块结束运行时也不会被销毁,因此在两次循环中b分别为11,12
而同样为局部变量的a则在test代码块结束时被销毁,故每次循环都为11
结尾
这是小白的第一篇博客,其中可能有错,欢迎大佬指正。
因本人技术有限,也没写什么有深度的知识。
但本小白会不断学习新知识,在日后写出有深度,有质量的博客。