C语言中的关键字:static

静态局部变量:static

static关键字有两个作用:修饰变量,修饰函数。现在我们只看他修饰变量的功能。
在引入static关键字之前,我们先来看一段代码

void fun(int a)
{
	a += 10;
}
int add(int x, int y)
{
	int c;
	fun(x);
	c = x + y;
	return c;
}
int main()
{
	int a = 10, b = 20;
	int z = add(a, b);
	return 0;
}

Z等于多少呢?40?30?
我们引入一个生存期的概念

生存期 (lifetime) :从对象分配到内存开始,到垃圾回收器从内存中删除对象结束这一段时间。即对象的存在时间。

在fun函数结束之后,函数所开辟的栈帧被释放,在fun函数中虽然 a值被改变,但是不会影响add函数中x的值。
所以有时候希望函数中的局部变量的值在函数调用结束之后不消失而时继续保留原值,即所占有的存储单元不被释放,在下一次在调用该函数时,该变量已有值。这时我们就应该指定该局部变量为“静态局部变量”,用关键字static进行声明。

static int j;
void fun1(void)
{
	static int i = 0;
	i++;
}
void fun2(void)
{
	j = 0;
	j++;
}
int main()
{
	for (int k = 0; k < 10; k++)
	{
		fun1();
		fun2();
	}
	return 0;
}

这是陈正冲老师在《c语言深度剖析》中所引用的例子,那么i,j分别是多少呢?
在上述代码中,j是静态全局变量,i是静态局部变量。
静态局部变量:在函数体里面定义,作用域仅限于该函数中使用,他定义在内存中的数据区,所以函数运行结束,该变量不会被销毁,函数下次仍然可以使用到这个值,但其他函数不可以调用此值。其他函数要想调用此变量需要在前面加extern进行调用。
静态全局变量:作用域仅限于被定义的文件中,其他文件即使使用extern声明也没办法使用它,准确的说是从静态变量被定义之处开始,在定义之前想要定义也必须extern声明才可使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值