静态关键字static。在C语言中,static关键字修饰变量和函数:
1、static修饰局部变量
局部变量的生命周期延长。当static修饰局部变量时,局部变量出了作用域之后不销毁。其生命周期变成整个程序的生命周期。本质上,static修饰局部变量的时候,改变了变量的存储位置。
内存:一个可执行C程序在内存中主要包含5个区域别是代码段(text),数据段(data),BSS段,堆段(heap)和栈段(stack)。
一般我们把进程地址空间分为三个区域:栈区,堆区,静态区。
局部变量原本存放于栈区,存放在栈区的数据特点是进入作用域创建,出作用域销毁。
局部变量被static修饰后,局部变量就被存放到了静态区,静态区的数据特点是在程序结束了后才销毁。
#include <stdio.h>
void test()
{
static a = 1;
a++;
printf("%d", a);
}
//a的值并未被销毁
int main()
{
int i = 0;
for (i = 0; i < 5; i++)
{
test();
}
return 0;
}
程序运行结果:static修饰局部变量使其生命周期变长。
2、static修饰全局变量
static修饰全局变量改变了变量作用域,使静态的全局变量只能在自己所在的源文件(.c)使用,即其他源文件不能再使用这个全局变量。
全局变量原本是有外部链接属性的,可以在其他的源文件中使用此变量,经过static修饰之后失去了外部链接属性。
3、static修饰函数
static修饰函数与修饰全局变量效果相同,改变了函数的外部链接属性,只能在自己所在的源文件使用。