推荐答案
在 C 语言中,static 关键字主要有以下三种作用:
局部变量:在函数内部声明的
static变量,其生命周期延长至整个程序运行期间,但作用域仍限于该函数内。这意味着该变量在函数调用之间保持其值不变。全局变量和函数:在全局变量或函数前使用
static关键字,可以限制该变量或函数的作用域仅限于当前文件,避免与其他文件中的同名变量或函数冲突。类成员变量(C++ 中):在 C++ 中,
static还可以用于类的成员变量和成员函数,表示该成员属于类本身,而不是类的某个实例。
本题详细解读
1. 局部变量中的 static
当 static 用于局部变量时,该变量的生命周期从函数调用结束延长到整个程序运行期间。这意味着即使函数调用结束,该变量的值也不会被销毁,下次调用该函数时,变量的值仍然是上次调用结束时的值。
// www.javascriptcn.com code example
void func() {
static int count = 0;
count++;
printf("Count: %d\n", count);
}
int main() {
func(); // 输出: Count: 1
func(); // 输出: Count: 2
func(); // 输出: Count: 3
return 0;
}在上面的例子中,count 是一个静态局部变量,每次调用 func() 时,count 的值都会保留并递增。
2. 全局变量和函数中的 static
当 static 用于全局变量或函数时,它会限制该变量或函数的作用域仅限于当前文件。这意味着其他文件无法访问或使用该变量或函数。
// www.javascriptcn.com code example
// file1.c
static int globalVar = 10;
static void helperFunc() {
printf("Helper Function\n");
}
void publicFunc() {
helperFunc();
printf("GlobalVar: %d\n", globalVar);
}// www.javascriptcn.com code example
// file2.c
extern void publicFunc();
int main() {
publicFunc(); // 可以调用 publicFunc
// helperFunc(); // 错误: helperFunc 不可见
// printf("%d\n", globalVar); // 错误: globalVar 不可见
return 0;
}在上面的例子中,globalVar 和 helperFunc 只能在 file1.c 中访问,而在 file2.c 中无法访问。
3. C++ 中的 static 类成员
在 C++ 中,static 还可以用于类的成员变量和成员函数。静态成员属于类本身,而不是类的某个实例。这意味着所有类的实例共享同一个静态成员。
// www.javascriptcn.com code example
class MyClass {
public:
static int staticVar;
static void staticFunc() {
printf("Static Function\n");
}
};
int MyClass::staticVar = 0;
int main() {
MyClass::staticVar = 10;
MyClass::staticFunc(); // 输出: Static Function
return 0;
}在上面的例子中,staticVar 和 staticFunc 属于 MyClass 类本身,而不是某个具体的实例。