static的使用
在C语言中,static是一个关键字,用于指定变量、函数和代码块的作用域和生命周期。
用法:
静态变量
1.修饰变量:使用static关键字声明的变量是静态变量,它们的作用域被限制在定义它们的源文件中,它们的生命周期从程序开始运行到程序结束。静态变量的初始值为0。
在函数内部声明的静态变量具有以下特性:
· 生命周期:静态变量的生命周期从程序开始执行到程序结束,它们在整个程序执行期间都存在,而不是在函数调用期间创建和销毁。
· 可见性:静态变量的作用域仅限于包含它们的函数内部,即它们是局部变量,但其值在函数调用之间保持不变。
· 初次初始化:静态变量只在第一次进入其定义的函数时进行初始化,并且仅执行一次。
#include <stdio.h>
void increment(void);
int main()
{
increment();//1
increment();//2
increment();//3
return 0;
}
void increment(void)
{
static int count = 0;//静态变量
count++;
printf("当前的计数值为:%d\n",count);
}
在函数外部(全局范围)声明的静态变量具有以下特性:
· 生命周期:静态全局变量的生命周期与程序的执行周期相同,但它们只在声明它们的源文件中可见,不能被其他源文件访问。
· 可见性:静态全局变量的作用域限于声明它们的源文件,不能被其他源文件使用。
2.修饰函数:使用static关键字声明的函数是静态函数,它们的作用域被限制在定义它们的源文件中,它们不能被其他文件中的函数调用。静态函数只能在定义它们的文件中使用。
使用’static’关键字声明的函数是静态函数。静态函数具有以下特性:
· 可见性:静态函数的作用域限于声明它们的源文件,不能被其他源文件调用。
· 隐藏性:将函数声明为静态的,可以将其隐藏在当前源文件中,以防止与其他源文件中具有相同名称的函数发生冲突。
#include <stdio.h>
static void increment(void);
int main()
{
increment();//1
increment();//2
increment();//3
return 0;
}
//定义一个静态函数,只能在定义它的文件中使用
static void increment(void)
{
static int count = 0;//静态变量
count++;
printf("当前的计数值为:%d\n",count);
}
3.修饰代码块:使用static关键字声明的代码块被称为静态代码块,它们只会在第一次使用它们的时候被执行一次,之后不会再次执行。
注意事项:
【1】静态变量和函数只能被定义一次,不能在其他文件中再次定义。
【2】静态变量和函数的作用域和生命周期不同于普通变量和函数,它们的值在程序运行期间一直存在。
【3】静态变量的初始值为0,如果没有显示地给静态变量赋初值,则它们的值为0。
【4】静态函数只能在定义它们的文件中使用,不能被其他文件中的函数调用。
【5】静态代码块只会在第一次使用它们的时候被执行一次,之后不会再次执行。