20201026-成信大-C语言程序设计-20201学期《C语言程序设计B》C-关于static关键字的读解
字面意思:静态
可以作用的对象:变量,函数
作用于全局变量 - 强调作用域
这时,它的作用,主要是限定这个全局变量的作用域是在本源文件内使用,强调的是一个变量的作用域的概念。
- 防止多个文件里,出现相同的全局变量名的冲突
- 限定使用空间范围
- 只能在所在的文件内使用
作用于局部变量 - 强调生命周期
这时,它的作用,就是典型的常用的静态局部变量
- 它有记忆性【即上一次用过之后,里面存的是什么值,下一次用时,还是什么值,不会再被初始化】
- 它只能被初始化一次,即定义时,第一次分配内存时,就完成初始化动作,以后不再再被初始化,但可以再被赋值
- 本质上,就是因为内存一旦分配,就锁定了,生命周期会一直伴随整个程序的结束才结束,这就是静态的真实含意
- 当再一次使用这个变量时,就直接取对应内存空间里的值出来使用即可【这个值,不可以再次被初始化,也就是说,它会一直保持之前的值】
作用于函数
仍然是一个作用域的强调,表示这个函数只能在本源文件中调用
示例讨论
#include <stdio.h>
int myfun(int a);
int main(void)
{
for (int i = 0; i < 5;i++)
{
// 每一次传进去的值都是 5
printf("\nmain中的myfun返回值:%d\n", myfun(5));
}
return 0;
}
/*
演示函数
vscode 常用编辑快捷键
ctrl+d 删除一行
ctrl+下 复制一行
alt+下 移动一行
shift+alt+A 给出块注释
*/
int myfun(int a)
{
static int b = 50; // 静态变量,定义时就完成初始化,一定要用常量来初始化
// int b = a; // 自动变量
printf("\n局部定义的静态变量b初始值:%d", b);
b--;
printf("\n局部定义的静态变量b自减后:%d", b);// ctrl+向下 复制一行; alt+向下 移动一行
b += a;
return b;
}
运行的结果如下
局部定义的静态变量b初始值:50
局部定义的静态变量b自减后:49
main中的myfun返回值:54
局部定义的静态变量b初始值:54
局部定义的静态变量b自减后:53
main中的myfun返回值:58
局部定义的静态变量b初始值:58
局部定义的静态变量b自减后:57
main中的myfun返回值:62
局部定义的静态变量b初始值:62
局部定义的静态变量b自减后:61
main中的myfun返回值:66
局部定义的静态变量b初始值:66
局部定义的静态变量b自减后:65
main中的myfun返回值:70
--------------------------------
Process exited after 0.05156 seconds with return value 0
请按任意键继续. . .