(C语言篇)static关键字

前言:祝各位程序员们1024快乐,技术越来越牛,也希望明年的今天回过头来和今天对比能骄傲的说:“我变的很牛了!”,话不多说,今天先奖励自己写一篇文章^_^

在c语言中:
static是用来修饰变量和函数的

1.修饰局部变量-称为静态局部变量

2.修饰全局变量-称为静态全局变量

3.修饰函数-称为静态函数

一、修饰局部变量

这里我们先上代码

#include <stdio.h>

void y()
{
	int i = 1;
	i++;
	printf("%d ",i);
}
int main()
{
	int a = 0;
	for (a = 0; a < 10; a++)
	{
		y();
	}
	return 0;
}

这里打印10个2,原因:当第一次出函数时,i 存储的数据就释放了,也就是说第二次进入函数时,i重新创建还是会等于1。以此类推将会全部打印2。

那我们在其前面加上static会发生什么样的改变呢。

#include <stdio.h>

void y()
{
	static int i = 1;
	i++;
	printf("%d ",i);
}
int main()
{
	int a = 0;
	for (a = 0; a <10; a++)
	{
		y();
	}
	return 0;
}

这里的结果为2 ~ 11,使用static修饰局部变量 i 后,使其变为静态局部变量,也就是出了y函数后 i 存储的数据没有被释放, 第二次进入时 i 就为2了,经过 i++后打印变为3,最后打印2~11。

在内存中有栈区、堆区、静态区。局部变量储存在栈区中,全局变量和静态变量储存在静态区中。

用static修饰局部变量,其实就是改变了变量的存储类型,使其从栈区存储变为静态区,使静态的局部变量出了作用域也不被释放,生命周期也变的和全局变量一样,都是程序结束后才释放。所以上面静态局部变量 i 出了作用域后并没有被销毁,而是存储在静态区中。这里需要注意的是就算 i 变为了静态局部变量,但其作用域并没有发生改变,只能在函数y内使用。

二、修饰全局变量

这里我们可以看到创建了两个源文件,(想要在另一个文件中调用其全局变量需要加extern +类型 +名字 ,这里博主前面也讲过了),这样打印的值为20。那我们加上static会变成怎么样呢

这里编译器报错了,这是因为一个全局变量在整个工程的内部文件中具有外部链接属性,用static修饰全局变量时,使其变为静态全局变量,也使全局变量的外部链接属性变为内部链接属性,这个全局变量只能在自己的源文件下使用。可以理解成公共厕所变为了私人厕所,与外界失去了联系(哈哈)。这样在另一个文件就用不了这个全局变量了,当然全局变量age还是可以在自己的文件中使用,例子如下:

三、修饰函数

其实static修饰函数和修饰全局变量很相似

这里我们可以看到函数能正常的使用,那当我们在test2.c中函数后加static呢

可以看到这里报错了,这里的原理和全局变量是一样的,函数本身就具有外部链接属性,当使用static修饰时使其的外部链接属性变为内部链接属性,从而使函数Add只能在自己的源文件中使用,不能再工程的其他内部源文件使用。 

好了今天介绍的static关键字就到这里了,如果发现错误和不足的地方请各位大佬指出,现在这里谢过各位啦。

评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

没完没了的麦当

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

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

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

打赏作者

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

抵扣说明:

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

余额充值