目录
前言
文章是本人学习过程中的一些记录、思考和参考大佬的文章后自己的理解。同时也希望自己以种讲述的方式来呈现给大家。欢迎大家来指正交流。(文章有参考部分,如有侵犯,联系我)
一、变量的作用域
1.作用域的概念
作用域:一段程序代码中所用到的变量并不总是有效/可用的,而限定这个变量的可用性的代码范围就是这个变量的作用域。
2.局部变量作用域
局部变量:作用范围是变量所在的局部范围(说通俗点就是在{}里面有效)。
#include<stdio.h>
int main()
{
{
int a = 10;
printf("%d\n", a);
}
printf("%d\n", a);
return 0;
}
//错误提示“未定义标识符a”
//原因是,第二个printf输出打印a值时程序中检测不到所定义的a。
// 在第一个printf所在的大括号内定义了a,当a出了所在的大括号,它就失去了作用。
3.全局变量作用域
全局变量:作用域使整个工程。不属于任何一个模块(这里的模块指的是“{}”),也不被任何的函数和“{}”所包括,不论在程序的哪个位置,都可以被使用(前提与局部变量不重名),并且往往声明在整个程序前端。
#include<stdio.h>
int a = 10;
int main()
{
{
printf("%d\n", a);
}
printf("%d\n", a);
return 0;
}
//输出结果,打印了两次10。
//因为变量a的作用域是全局,作用整个工程,从main函数开始直到结束都是存在的
//只要有变量a的出现就可以直接使用。
问题:当全局变量和局部变量的变量名相同时,如何判断使用的是哪一个?
//实例1
#include<stdio.h>
int a = 10;
int main()
{
int a = 5;
printf("%d\n",a);//此时打印的是5
//第一个a是全局变量,第二个a是局部变量
//这里的printf和第二个a近他们在同一个模块里,这里就是“局部优先”
return 0;
}
//实例2
#include<stdio.h>
int a = 10;
int main()
{
{
int a = 5;
}
printf("%d\n",a);//此时打印的是10
return 0;
}
//因为第二个a已经出了它的作用域,所以这时全局变量发挥作用
二、变量的生命周期
1.生命周期的概念
生命周期:指的是变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
2.局部变量的生命周期
进入作用域生命周期开始,出作用域生命周期结束。
3.全局变量的生命周期
整个程序的生命周期。
三、理解变量的作用域和生命周期
作用域更多的是偏向空间,而生命周期更多偏向的是时间。在一段已经完成程序中,所有的模块都是确定的,这时候作用域就是固定的,不会随时间改变而改变,当程序运行到某个模块时,模块内部的局部变量就有了生命,直到这个模块的内容执行完毕,生命就结束了,在这个过程中就是它的生命周期。(通俗的讲就是,完整的代码中,变量的作用域是固定的,当程序执行到这个作用域时,变量就开始发挥作用有了生命,出了这个作用域,变量不再发挥作用,生命结束)