当前位置 : 主页 > 编程语言 > c语言 >

解析static关键字

来源:互联网 收集:自由互联 发布时间:2023-09-07
前言: 在C/C++学习时,我们把内存大概分为3个区域。 1、栈区 用来存放局部变量和形式参数。临时作用的变量都是在栈区。 栈区上变量的特点:进入作用域创建,出作用域自动销毁(

前言:

在C/C++学习时,我们把内存大概分为3个区域。

1、栈区

用来存放局部变量和形式参数。临时作用的变量都是在栈区。

栈区上变量的特点:进入作用域创建,出作用域自动销毁(将内存返回操作系统)

2、堆区

用于动态内存的分配。

malloc,calloc,realloc,free

3、静态区

用于全局变量,实际参数,静态变量

静态区变量的特点:创建好后,直到程序结束后才销毁。

引言:

static关键字修饰局部变量,全局变量,函数时有不同的作用。

一、修饰局部变量:

效果:使局部变量的生命周期变长,直到程序结束才销毁。

举例:

解析static关键字_static关键字

此时a是一个局部变量,原先局部变量的生命周期是进入作用域开始,出作用域就销毁。因此本题的输出结果就是全2,因为每次进入局部变量a的函数test里面,就需要重新创建一个,而出函数test()a就自动销毁。

解析static关键字_static关键字_02

效果:

而经过static修饰的局部变量,打印结果是2,3,4,5,6,7,8,9,10,11使得这个静态变量的生命周期增长,直到程序结束才结束。

底层原理:

本来一个局部变量是存储在栈区,而经过static修饰后的局部变量存储类型(位置)发生了改变,从栈区变化到了静态区

与全局变量的辨析:

经过static修饰后的局部变量生命周期增长了,但是作用域还是局部变量的作用域,这是跟全局变量的差别。生命周期变长,但作用域不变

二、修饰全局变量

全局变量具有外部链接属性,所以在其他源文件内部依然可以使用。

原理:

static修饰全局变量,改变了这个全局变量的连接属性,由外部链接属性变成了内部连接属性

这个静态变量只能在自己坐在的源文件内部使用,不能在其他的源文件内部使用了。

效果:

感觉是作用域变小了

三、修饰函数

效果跟修饰全局变量基本一样,也是改变了函数的链接属性

解析static关键字_static关键字_03

上一篇:C++ 代码评审最终指南 —— 第 2 部分
下一篇:没有了
网友评论