目录
1、(作用)域的概念
2、全局与局部的相对性
3、生命周期
3、静态变量static
结语:
前言:
在c语言中,全局变量的可见范围是整个工程,而局部变量的可见范围从该变量被定义到该作用域结束,在一个变量的可见范围外是调用不了该变量的,换句话说在一个变量的可见范围内不能定义一个和该变量同名的变量,而在该变量的可见范围外可以定义一个与该变量名字一样的变量。
全局变量的生命周期是整个程序的生命周期,而局部变量的生命周期是从该变量在他的作用域中被定义开始,直到出了该作用域就结束,结束意味着该局部变量以及他的值会被系统销毁。
首先再了解全局变量和局部变量前,最重要的是了解什么是作用域,通常用一对大括号”{}“括起来的区域就是一个作用域,而在该作用域创建的变量为局部变量,重要的是作用域与作用域之间是互不干扰的,是相对独立的两块区域。
比如最常见的main函数就是用一个大括号括起来的:
#include
int main()
{//左大括号
//main函数的作用域
//...
int a = 12;//a为局部变量
return 0;
}//右大括号
不仅仅只有函数是用大括号进行规划的,if语句和while循环、fot循环等等都是用大括号”{}“进行规划作用域的,因此在这些大括号中创建的变量也可以称为局部变量,且相互独立。
例子如下:
#include
int main()
{
int a = 12;
if (1)
{
int a = 20;
}
for (int a = 1; a > 0; a--)
{
}
while (a--)
{
int a = 100;
}
printf("hello world");
return 0;
}
以上代码虽然在同一个main函数内定义了4个a变量,但是是在不同的作用域中都有的,因此最后可以正常打印出了hello world,说明该程序没有问题。
函数区分作用域的例子如下:
#include
void func()
{
int a = 20;
}
int main()
{
int a = 12;
func();
printf("hello world");
return 0;
}
最后依旧能够打印出hello world,表示该程序没有问题。
全局变量和局部变量是具有相对性的,比如一个局部变量a,他相对于他作用域外是局部的,但是他相对于他的作用域里面的某个作用域是全局的。
示例代码如下:
#include
int main()
{
int a = 12;//相对于if语句里的作用域,该a是全局变量
if (1)
{
printf("%d ", a);//可以打印出a的值
}
return 0;
}
运行结果:
若一个作用域和该域之外的作用域都有一个同名变量a,若想在该作用域中打印该变量的值,则打印的是局部变量的值,遵循局部优先的法则。
示例代码如下:
#include
int a = 1020;//全局变量
int main()
{
printf("%d\n", a);//由于局部变量的可见范围是在其创建时才开始,因此这里打印的是1020
int a = 12;//局部优先
printf("%d\n", a);
if (1)
{
printf("%d\n", a);//由于局部变量的可见范围是在其创建时才开始,因此这里打印的是12
int a = 20;//局部优先
printf("%d\n", a);
}
return 0;
}
运行结果:
一个变量出了其作用域就会被销毁,表示其生命周期结束了,生命周期通常是用函数中的局部变量来做解释,因为一个函数被调用完成后会被销毁,其函数中的局部变量也就跟着销毁了。
示例代码如下:
#include
void func()
{
int a = 2;//出了函数,变量a就被销毁
}
int main()
{
func();
printf("%d ", a);//此处会找不到变量a
if (1)
{
int a = 12;//出了作用域,也可以理解为变量a被销毁
}
printf("%d ", a);//此处也会找不到变量a
return 0;
}
static的作用是延长局部变量的生命周期,但是不会延长其可见范围,也就是某个作用域中的变量加了static后,下一次来到该作用域时,该变量不会再次被初始化,而是接着用之前的值,但是在该变量作用域外的作用域依然无法调用他。
示例代码如下:
#include
void func()
{
static int a = 2;//只会初始化一次a,后续就跳过初始化的步骤
a++;
printf("%d ", a);
}
int main()
{
func();
func();
func();
//printf("%d ", a);//此处依然找不到a
return 0;
}
运行结果:
没加static的运行结果:
从结果可以看到,如果没有加static,那么局部变量a在调用完函数func后就跟着销毁了,则下一次调用函数func时,a又会重新初始化。如果加了static,a只会初始化一次,并且不会跟着函数一起销毁,后续调用函数func时,a会保留之前的值进入该函数。
全局变量和局部变量作为c语言中的基础,其虽然看起来不起眼,但是对今后的学习都是非常重要的一环知识,最后希望本文可以给你带来更多的收获,如果本文对你起到了帮助,希望可以动动小指头帮忙点赞+关注+收藏!如果有遗漏或者有误的地方欢迎大家在评论区补充~!!谢谢大家!!( ̄︶ ̄)↗