变量的作用域与生命周期

作用域

定义:变量并不总是可用的,而该变量在部分代码中可使用的范围即为变量的作用域。

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中的应用
在源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

结尾

这是小白的第一篇博客,其中可能有错,欢迎大佬指正。
因本人技术有限,也没写什么有深度的知识。
但本小白会不断学习新知识,在日后写出有深度,有质量的博客。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

想学c啊啊

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

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

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

打赏作者

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

抵扣说明:

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

余额充值