static关键字有多种用途。以下是关于静态变量 (static) 的简要概述:
1.静态局部变量:
- 在函数内部定义的静态变量。
- 生命周期:从程序开始执行到程序结束。
- 作用域:仅限于在其被定义的函数中。
- 每次调用该函数时,静态局部变量不会被重新初始化。它会保留上一次的值。
void increment() {
static int count = 0;
count++;
printf("%d\n", count);
}
每次调用 increment() 时,count 的值都会递增。
以下为static函数的使用,在新定义的函数fun里面定义了一个函数x,它被使用了static修饰。
void fun();
int x = 3;
int main() {
int i;
for(i = 1; i < x; i++) fun();
}
void fun() {
static int x=1;
x*=x+1;
printf("%d", x);
}
函数fun内部定义了一静态局部变量x,尽管与全局变量x同名,但它们占用各自不同的内存单元,对于静态变量x来说,因为它的生存期与程序相同,所以每次调用后其值将长期保留,其初始值是当程序运行时赋值一次,以后调用不再赋初始值。所以第一次调用输出2,第二次调用就输出6(2*3)。
2. 静态全局变量:
- 在函数外部定义,但在文件内部的静态变量。
- 生命周期:从程序开始执行到程序结束。
- 作用域:仅限于在其被定义的文件中。
- 对文件外的函数不可见。
static int globalVar = 10;
3. 静态类成员(主要在面向对象的语言如C++、Java中):
- 属于类而不是特定的对象实例。
- 所有对象实例共享同一个静态成员的副本。
- 需要使用类名而不是对象来访问静态成员。
class MyClass {
public:
static int staticVar;
};
int MyClass::staticVar = 0;
在Java中,它类似于:
public class MyClass {
public static int staticVar = 0;
}
4.静态函数:
- 在C和C++中,可以有静态函数。
- 仅在定义它的文件中可见。
- 不能访问类的非静态成员(在C++中)。
static void myFunction() {
// ...
}
5. 静态方法(面向对象语言):
- 属于类而不是对象实例。
- 不能访问类的非静态成员。
- 通常用于实现不需要访问或修改对象特定数据的功能。
6.其他用途:static关键字在某些编程语言和上下文中还有其他的意义和用途。
当使用static关键字时,需要明确你想要的效果以及你正在使用的编程语言的语法规则。