我在C代码的不同地方看到过静态这个词;这是否像c#中的静态函数/类(实现是跨对象共享的)?


当前回答

一个静态变量值在不同的函数调用之间持续存在,它的作用域被限制在本地块 静态变量的初始值总是0

其他回答

如果在静态函数中声明变量,其值将不会存储在函数调用堆栈中,并且在再次调用该函数时仍然可用。

如果将全局变量声明为static,则其作用域将限制在声明它的文件内。这比常规的全局变量稍微安全一些,后者可以在整个程序中读取和修改。

在C编程中,static是一个保留关键字,它控制生存期和可见性。如果我们在函数中将变量声明为静态变量,那么它将只在整个函数中可见。在这种用法中,该静态变量的生命周期将在函数调用时开始,并在函数执行后终止。示例如下:

#include<stdio.h> 
int counterFunction() 
{ 
  static int count = 0; 
  count++; 
  return count; 
} 

int main() 
{ 
  printf("First Counter Output = %d\n", counterFunction()); 
  printf("Second Counter Output = %d ", counterFunction()); 
  return 0; 
}

上面的程序会给我们这样的输出:

First Counter Output = 1 
Second Counter Output = 1 

因为一旦我们调用这个函数,它就会初始化count = 0。当我们执行counterFunction时,它会销毁count变量。

简单的回答……视情况而定。

静态定义的局部变量不会在函数调用之间丢失它们的值。换句话说,它们是全局变量,但作用域是定义它们的局部函数。 静态全局变量在定义它们的C文件之外是不可见的。 静态函数在定义它们的C文件之外是不可见的。

分享一下我对这一点的了解。

在C语言中static是一个声明说明符,它分为三类:

存储类:有四个类:auto, static, extern和register。 类型限定符:如关键字:const, volatile等。 类型说明符:如关键字:void, char, short, int等。

所以静态是一个存储类。它将确定C程序中每个变量的以下三个属性。

存储持续时间:指为变量分配内存和释放内存的时间。具有静态存储持续时间的变量,只要程序在运行,它就保持在相同的内存位置。 作用域:指程序文本中变量可以被访问的部分。静态变量具有文件作用域而不是块作用域。 链接:指程序的不同部分(或文件)可以共享变量的程度。如果一个静态变量是在一个块中声明的,那么它就没有链接。如果一个静态变量是在块外部声明的,那么它就有内部链接。内部链接使它可以在单个文件中访问。

静态存储类对变量有不同的影响,这取决于它是在块外部还是块内部声明的。需要具体情况考虑。

从维基百科:

在C编程语言中,static与全局变量和函数一起使用,以将它们的作用域设置为包含文件。在局部变量中,static用于将变量存储在静态分配的内存中,而不是自动分配的内存中。虽然语言没有规定这两种类型内存的实现,但静态分配的内存通常在编译时保留在程序的数据段中,而自动分配的内存通常作为瞬态调用堆栈实现。