📜  C中的static(静态)

📅  最后修改于: 2020-10-21 08:11:06             🧑  作者: Mango

C中的静态

静态是C编程语言中使用的关键字。它可以与变量和函数一起使用,即我们可以声明一个静态变量和一个静态函数。普通变量仅限于定义它的范围,而静态变量的范围遍及整个程序。

在以下情况下可以使用static关键字:

  • 静态全局变量当使用static关键字声明全局变量时,则称为静态全局变量。它在程序的顶部声明,并且它的可见性遍及整个程序。
  • 静态函数使用静态关键字(称为静态函数)声明函数。它的生命周期贯穿于整个程序。
  • 静态局部变量当使用static关键字声明局部变量时,则称为静态局部变量。静态局部变量的内存在整个程序中都是有效的,但是变量的可见范围与自动局部变量相同。但是,当函数在第一个函数调用期间修改静态局部变量时,则此修改后的值也可用于下一个函数调用。
  • 静态成员变量如果在类中使用static关键字声明成员变量,则称为静态成员变量。可以通过类的所有实例(而不是特定实例)访问它们。
  • 静态方法用static关键字声明的类的成员函数称为静态方法。类的所有实例都可以访问它,而不是特定实例可以访问它。

让我们通过一个例子来理解。

#include 
int main()
{
 printf("%d",func());
printf("\n%d",func());
 return 0;
}
int func()
{ 
    int count=0; // variable initialization
    count++; // incrementing counter variable

   return count; }

在上面的代码中,func()函数被调用。在func()中,count变量得到更新。函数完成执行后,count变量的内存将被删除。如果我们不想从内存中删除计数,则需要将count变量用作静态变量。如果我们将变量声明为静态变量,则即使函数完成其执行,该变量也不会从内存中删除。

输出量

1                                                                                                                               
1

静态变量

静态变量是在各种函数调用中保持其值不变的变量。

句法

静态变量的语法如下:

static data_type variable_name; 

让我们看一个简单的静态变量示例。

#include 
int main()
{
   printf("%d",func());
   printf("\n%d",func());

    return 0;
}
int func()
{
    static int count=0;
    count++;
    return count;
}

在上面的代码中,我们已将count变量声明为static。当调用func()时,count的值更新为1,在下一个函数调用期间,count变量的值变为2。因此,可以说静态变量的值在函数调用中持续存在。 。

输出量

1                                                                                                                             
2        

静态功能

我们知道默认情况下非静态函数是全局的,这意味着该函数也可以在文件外部访问,但是如果我们将该函数声明为静态,则它将限制函数范围。静态函数只能在文件中访问。

静态函数如下所示:

static void func()
{
    printf("Hello javaTpoint");
}

黑白静态和全局变量的差异

全局变量是在函数外部声明的变量。这些全局变量存在于程序的开始,并且其范围一直保留到程序结束。也可以在程序外部访问它。

静态变量仅限于定义它们的源文件,即,其他源文件无法访问它们。

静态变量和全局变量都具有静态初始化。在这里,静态初始化意味着如果我们不给变量分配任何值,那么默认情况下,会将0值分配给变量。

黑白差异静态局部变量和静态全局变量

静态全局变量

如果在函数外部使用static关键字声明了该变量,则称为静态全局变量。在整个程序中都可以访问。

静态局部变量

带有static关键字的变量在函数内部声明,称为静态局部变量。静态局部变量的范围将与自动局部变量的范围相同,但在整个程序执行过程中将使用其内存。当函数在一个函数调用期间修改静态局部变量的值时,即使在下一个函数调用期间它也将保持不变。

静态变量的属性

以下是静态变量的属性:

  • 静态变量的内存分配在静态变量内。
  • 它的内存在整个程序中都可用,但是范围将与自动局部变量相同。它的
  • 值将在各种函数调用中保持不变。
  • 如果我们不给变量赋任何值,则默认值为0。
  • 全局静态变量无法在程序外部访问,而其他源文件可以访问全局变量。