浅析static

Posted zsQgqdsd1002

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅析static相关的知识,希望对你有一定的参考价值。


前言

C语言中有许多关键字,每个关键字都有着不同的作用以及意义,例如typedef的作用是起别名,const的作用是让一个变量变成常量等等,而今天要说的是一个可以修饰变量和函数的关键字——static。


提示:以下是本篇文章正文内容,下面案例可供参考

一、static是什么?

Static是C语言中众多关键字其中之一,其作用是修饰变量和函数,那么具体会起到一个怎么样的作用呢?现在让我们一起来探索一下。

二、static的用法及作用

1.static修饰局部变量

static可以放在局部变量之前,我们用一个简单的程序来探索一下static的用法

void Func() {
	int x = 0;
	x = x + 3;
	printf("%d\\n", x);
}
int main() {
	Func();
	Func();
	Func();
	return 0;
 }

程序的输出结果会是什么呢?没错!程序会一直打印3,因为x是一个局部变量,在main函数调用Func是诞生,一旦调用结束,x就会被释放,在下一次调用时,x就会重新变为0。现在我们对程序进行一个小小的改动:

void Func() {
	static int x = 0;
	x = x + 3;
	printf("%d\\n", x);
}
int main() {
	Func();
	Func();
	Func();
	return 0;
 }

我们再来看一看程序的输出结果:
在这里插入图片描述
此时程序的输出结果变成了3,6,9。这就是static起到了作用,当static修饰局部变量时,会改变局部变量的生命周期,原本Func函数里的x的生命周期是Func函数内,用完就会被释放;而static修饰后,x的生命周期就变成了整个函数。

2.static修饰全局变量

static也可以放在全局变量之前,我们再来简单的验证一下它的作用,我们来定义一个全局变量,将这个全局变量在放另一个.c文件中,然后在test.c中调用一下这个全局变量:

int global = 100;
extern global;
//声明一下变量global,当我们访问另一个函数里的变量时,需要加上变量声明,不然无法成功调用
int main() {
	printf("%d", global);
}

我们来看一下程序的输出结果,输出的结果是100。我们现在小小的改动一下:

static int global = 100;

在这里插入图片描述
这个时候我们发现,程序报错了,并且给出的原因是global无法被解析,所以我们知道,当static修饰全局变量时会修改全部变量的作用域,从整个工程中修改到当前文件中。

3.static修饰函数

static修饰函数的作用和修饰全局变量的作用是一样的,都是将其作用范围修改至仅当前文件可以调用。这里我们就不多做解释了。


总结

以上就是今天我想讲的内容,我仅仅简单介绍了C语言众多关键字中的一种,即——static的用法和作用,还有很多的关键字我在慢慢的探索和学习过程中,希望可以和大家一起进步。如果有错误的地方或者没有说到的地方,欢迎大佬私信我。

以上是关于浅析static的主要内容,如果未能解决你的问题,请参考以下文章

浅析static

java-static关键字用法-浅析

浅析Object基类提供的Virtual Object.Equals, Static Object.Equals and Reference.Equals等三个方法

浅析java修饰符之public default protected private static final abstract

浅析 Python 模块

深入浅析Java中Static Class及静态内部类和非静态内部类的不同