(C语言篇)static关键字

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

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

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

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

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

一、修饰局部变量

这里我们先上代码

#include 

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 

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。

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

(C语言篇)static关键字_第1张图片

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

二、修饰全局变量

(C语言篇)static关键字_第2张图片

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

(C语言篇)static关键字_第3张图片

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

(C语言篇)static关键字_第4张图片

三、修饰函数

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

(C语言篇)static关键字_第5张图片

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

(C语言篇)static关键字_第6张图片

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

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

你可能感兴趣的:(c语言笔记,1024程序员节,c语言)