C语言教程-详解 C 语言中 Static 关键字

Static在C语言中是一个关键字,可以用于变量和函数,即我们可以声明静态变量和静态函数。普通变量的作用域仅限于其定义的范围,而静态变量的作用域是整个程序。
static关键字可以用在以下情况下
静态全局变量
当使用static关键字声明全局变量时,称为静态全局变量。它在程序的顶部声明,并且其可见性在整个程序中。
静态函数
当使用static关键字声明函数时,称为静态函数。它的生命周期是整个程序。
静态局部变量
当使用static关键字声明局部变量时,称为静态局部变量。静态局部变量的内存在整个程序中有效,但是变量的可见范围与自动局部变量相同。然而,当函数在第一次调用时修改了静态局部变量的值,那么在下一次函数调用时,这个修改后的值也将可用。
静态成员变量
当在类中使用static关键字声明成员变量时,称为静态成员变量。它们可以被类的所有实例访问,而不是特定实例。
静态方法
在类中使用static关键字声明的成员函数称为静态方法。它可以被类的所有实例访问,而不是特定实例。
让我们通过一个例子来理解。
#include <stdio.h>
int main()
{
printf("%d", func());
printf("\n%d", func());
return 0;
}
int func()
{
static int count = 0;
count++;
return count;
}
在上面的代码中,我们将count变量声明为静态。当调用func()时,count的值更新为1,在下一次函数调用期间,count变量的值变为2。因此,我们可以说静态变量的值在函数调用之间持久存在。
输出:
1
2
静态函数
C语言中的静态函数是只能在定义它的文件内部访问的函数。它具有有限的作用域,不能被其他源文件访问。静态函数在函数声明中使用static关键字在返回类型之前声明。
语法
static 返回类型 函数名(参数)
{
// 函数体
}
示例
static void func()
{
printf("你好,世界!");
}
在上面的示例中,func()函数被声明为静态函数。它只能在定义它的文件内部访问。
静态变量和全局变量的区别
- 作用域:全局变量在整个程序中都可以访问,包括其他源文件,而静态变量仅限于定义它们的源文件,不能被其他源文件访问。
- 可访问性:全局变量可以在程序外部访问,而静态变量不能在定义它们的文件之外访问。
- 内存分配:全局变量在程序开始时分配内存,并在程序结束时销毁,而静态变量在函数调用时分配内存,并在函数调用之间保持其值不变。
静态局部变量和静态全局变量的区别
- 作用域:静态局部变量与自动局部变量具有相同的作用域,限于定义它们的块内部,而静态全局变量具有文件作用域。
- 内存分配:静态局部变量在函数调用时分配内存,并在函数调用之间保持其值不变,而静态全局变量在程序开始时分配内存,并在整个程序执行期间存在。
- 可访问性:静态局部变量不能在定义它们的函数之外访问,而静态全局变量可以在同一文件的其他函数中访问。
注意:需要区分静态变量和全局变量,以及静态局部变量和静态全局变量之间的区别。