C语言学习小记

STATIC

static 修饰变量和函数

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

延长局部变量的生命周期 离开作用域不销毁

1)内存中的位置:静态存储区

2)初始化:未经初始化的局部静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)

3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。

e.g.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void function()
{
static int a = 1;
a++;
printf("a = %d",a);
}
int main()
{
int i = 1;
while (i < 5)
{
function();
i++;
}
return 0;
}
执行结果
1
2
3
4
a = 2
a = 3
a = 4
a = 5

  1. 修饰全局变量 - 全局静态变量

改变全局变量的作用域

1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)

2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显式初始化)

3)作用域:全局静态变量在声明他的文件acc.从定义之处开始到文件结尾之外是不可见的

定义全局静态变量的好处:

<1> 不会被其他文件所访问,修改

<2> 其他文件中可以使用相同名字的变量,不会发生冲突

  1. 修饰函数

更改函数的链接属性 -- 外部链接属性 -> 内部链接属性

注: extern 声明外部符号


C语言学习小记
http://catvii.github.io/2022/05/02/c语言学习小记/
作者
CatVII
发布于
2022年5月2日
许可协议