C语言学习小记
STATIC
static 修饰变量和函数
- 修饰局部变量 - 局部静态变量
延长局部变量的生命周期 离开作用域不销毁
1)内存中的位置:静态存储区
2)初始化:未经初始化的局部静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。
注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。
e.g. 执行结果 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16void 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
4a = 2
a = 3
a = 4
a = 5
- 修饰全局变量 - 全局静态变量
改变全局变量的作用域
1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)
2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显式初始化)
3)作用域:全局静态变量在声明他的文件
acc.从定义之处开始到文件结尾
之外是不可见的定义全局静态变量的好处:
<1> 不会被其他文件所访问,修改
<2> 其他文件中可以使用相同名字的变量,不会发生冲突
- 修饰函数
更改函数的链接属性 -- 外部链接属性 -> 内部链接属性
注: extern
声明外部符号
C语言学习小记
http://catvii.github.io/2022/05/02/c语言学习小记/