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()函数被声明为静态函数。它只能在定义它的文件内部访问。

静态变量和全局变量的区别

  1. 作用域:全局变量在整个程序中都可以访问,包括其他源文件,而静态变量仅限于定义它们的源文件,不能被其他源文件访问。
  2. 可访问性:全局变量可以在程序外部访问,而静态变量不能在定义它们的文件之外访问。
  3. 内存分配:全局变量在程序开始时分配内存,并在程序结束时销毁,而静态变量在函数调用时分配内存,并在函数调用之间保持其值不变。

静态局部变量和静态全局变量的区别

  1. 作用域:静态局部变量与自动局部变量具有相同的作用域,限于定义它们的块内部,而静态全局变量具有文件作用域。
  2. 内存分配:静态局部变量在函数调用时分配内存,并在函数调用之间保持其值不变,而静态全局变量在程序开始时分配内存,并在整个程序执行期间存在。
  3. 可访问性:静态局部变量不能在定义它们的函数之外访问,而静态全局变量可以在同一文件的其他函数中访问。

注意:需要区分静态变量和全局变量,以及静态局部变量和静态全局变量之间的区别。

标签: c语言, c语言教程, c语言技术, c语言学习, c语言学习教程, c语言下载, c语言开发, c语言入门教程, c语言进阶教程, c语言高级教程, c语言面试题, c语言笔试题, c语言编程思想