关于局部变量和整体变量的区别

在编写程序的过程中,势必要根据需求来定义变量,那么定义变量有什么要求,怎么去使用变量,就让我们耐心地学习吧!

#include<stdio.h>


int global = 2019;//全局变量

int main()
{
int local = 2018;//局部变量
printf("global = %d\n", global);
return 0;
}

在学习变量之前,我们首先要了解main()函数是工程主函数,是程序执行的入口,也就是说我们编好的程序在预处理之后是从main函数开始执行的,main也是一个函数。

首先,我们把直接定义在.c文件内的变量global称为全局变量,注意全局变量的位置是在函数之外的,把定义在函数之内的变量local称为局部变量。

下面我们从作用域和生命周期两个方面来了解两者的区别。

全局变量和局部变量的作用域

运行图一的代码,可以得到global =2019的结果,也就是说全局变量可以被函数调用。

从作用域角度来说,先抛出一个结论,全局变量在整个工程内都可以调用,但对局部变量来说,作用域只在函数内部,出了这个函数就不能被调用了。

#include<stdio.h>

void  test()
{
int local = 2018;//局部变量
printf("global = %d\n",local);
}
int main()
{
test();
printf("global = %d\n",local);
return 0;
}

图二的代码,main函数中的printf("global = %d\n",local);语句会报错local未声明。我们显然是在test函数中声明了局部变量local,在程序跳出test之后声明就失效了,这就是说局部变量的作用域仅限于这个函数内部。

 

 图三所示,想要调用在另一个文件定义的全局变量,只需要在本文件内声明一下就可以,使用extern int global;语句实现,所以说全局变量在整个工程内都可以调用。

但是有一个特例,可以改变全局变量的作用域。

 全局变量由于定义时在前面加了static就无法被其他源文件调用,也就是作用域只限于本文件。

所以上图的程序会报错。

全局变量和局部变量的生命周期

以上就是对全局变量和局部变量的作用域的说明,接下来是函数的生命周期。

讲的是一个变量自定义的时候开始出现在我们的内存中,但它在什么时候结束呢,全局变量可以被整个工程所调用,所以全局变量的生命周期就是整个程序的运行时间,当程序运行结束时全局变量被释放,而局部变量的生命周期与所在的函数有关,从函数中出来时局部变量被释放,所以出于节约内存空间的目的,我们在编写程序的过程中尽量使用局部变量。

但一样我们也可以改变局部变量的生命周期。

 如图中的local第一次函数和第二次函数输出的结果是一样的,是因为第一次调用test函数中定义的局部变量在函数结束时释放了,第二次调用test函数是重新定义local,和第一次得到了相同的结果。

接下来让我们在定义局部变量时做一点小改动,再来看看结果。

 我们在定义局部变量添加了static,局部变量的生命周期由此发生改变,可以看出函数的输出结果和第一次明显有了不同。这是由于static,第一次调用函数结束之后,系统并没有把local释放而是把local的值保存了下来,在第二次调用的时候就不需要重新定义了,所以这是一个有记忆的函数。

知识分享到此结束,喜欢我的小伙伴,可以点赞、评论、加关注,我会努力更新的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JDSZGLLL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值