理解静态变量局部变量全局变量静态函数全局函数的作用域和生命周期以及在内存中的存存储位置

Posted 軒邈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解静态变量局部变量全局变量静态函数全局函数的作用域和生命周期以及在内存中的存存储位置相关的知识,希望对你有一定的参考价值。

/*
	2022.06.05
	目的:
		理解静态变量、局部变量、全局变量、静态函数、全局函数的作用域和生命周期以及在内存中的存存储位置
	理论:
		1.局部变量:
			局部变量也叫auto自动变量(auto可写可不写),一般情况下代码块内部定义的变量都是自动变量,特点如下:
			a.在一个函数内定义,只在函数范围内有效;
			b.在复合语句中定义,只在复合语句中有效;
			c.生命周期,随着函数的调用结束或复合语句的结束,其生命周期也就结束了;
			d.存储位置:栈区。
		2.全局变量:
			a.函数外定义;
			b.可被本文件或者其他文件中的函数共用(需要提前声明);
			c.生命周期,从程序运行开始到结束,一直存在;
			d.注意,不同的文件全局变量的名字不可重名;
			e.注意,如果未初始化,系统默认初始化为0;
			f.存储位置,全局区。
		3.静态变量:
			在变量前面加上关键字static的即是静态的变量,静态变量的存储位置都是在全局区,所以他们的生命周期是从程序开始到结束。
			但是作用域两者有区别。
			(1)静态局部变量
				a.生命周期,从程序运行开始到结束,一直存在;
				b.作用域,局部作用域引用,只能定义在函数内部有效;
				c.注意,函数内部只能初始化一次,但是可以多次赋值;
				d.注意,函数内部局部变量和静态局部变量的变量名不能相同;
				e.存储位置,全局区。

			(2)静态全局变量
				a.生命周期,从程序运行开始到结束,一直存在;
				b.作用域,文件作用域,函数外定义,只能在本文件的函数中使用;
				c.注意,不同文件静态全局变量可以重名,作用域不冲突;
				d.注意,同静态局部变量一样,在文件中也只会初始化一次;
				e.存储位置,全局区。
		4.函数:
			函数在默认情况下都是全局的,在函数返回值类型的前面加上static则函数变为静态,
			函数定义为static意味着这个函数只能在定义这个函数的文件中被调用,在其他函数内
			不能被调用,即使在其他文件中声明这个函数也没用。

			(1)全局函数
				a.生命周期,从程序创建到程序销毁;
				b.作用范围,项目中的所有文件;
				c.存储空间,代码区;

			(2)静态函数
				a.生命周期,从程序创建到程序销毁;
				b.作用范围,定义所在文件;
				c.存储空间,代码区;
		5.补充:static关键字三大作用
			(1)隐藏
				当我们在没有使用static这个关键字的时,定义的全局变量和函数都是具有全局性的。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突的问题。
			
			(2)加长变量的生命周期
				存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化,并且生命周期是整个程序开始运行到程序结束。
			
			(3)静态变量未初始化默认初始化为0
				静态的变量如果没有进行初始化的话,系统会默认初始化为0,全局变量也是如此。

	功能:
		
*/

以上是关于理解静态变量局部变量全局变量静态函数全局函数的作用域和生命周期以及在内存中的存存储位置的主要内容,如果未能解决你的问题,请参考以下文章

static作用(修饰函数局部变量全局变量)

在C语言中具体静态变量static要这么去用?

全局变量与静态全局变量的异同(static与非static)

全局变量与静态全局变量的异同(static与非static)

C语言之变量作用域

static静态变量和普通变量,静态函数和普通函数