📅  最后修改于: 2023-12-03 15:23:22.888000             🧑  作者: Mango
静态变量是指在函数内部或全局范围内定义的变量。静态变量在程序生命周期中只被初始化一次,之后每次调用该函数或访问该变量时,该变量都会保留其上一次的值。
在C中初始化静态变量是一个很常见的操作,可以通过以下两种方式实现。
在函数内部定义的静态变量可以通过赋初值来初始化,只要确保初始化代码只被执行一次即可。例如:
#include <stdio.h>
void test()
{
static int count = 0;
count++;
printf("count: %d\n", count);
}
int main()
{
test(); // count: 1
test(); // count: 2
test(); // count: 3
return 0;
}
上面的例子中,变量count只被初始化一次,并在每次调用test()函数时保留其上一次的值。
需要注意的是,虽然说static变量的值只被初始化一次,但并不意味着该值一定是0。如果没有明确给变量赋初值,该变量的初值在编译时是未定义的。
在全局范围内定义的静态变量可以通过赋初值来初始化。也可以在定义时设置默认值,例如:
#include <stdio.h>
static int count = 0; // 设置默认值
void test()
{
count++;
printf("count: %d\n", count);
}
int main()
{
test(); // count: 1
test(); // count: 2
test(); // count: 3
return 0;
}
上面的例子中,变量count在定义时被设置为0,并在每次调用test()函数时保留其上一次的值。
需要注意的是,在全局范围内定义的变量不管是静态还是非静态,其作用域都是整个程序,不同于在函数内部定义的变量只在该函数内部可见。
在C++中,可以通过构造函数来实现在全局范围内初始化静态变量,但在C中是不支持的。
在C中初始化静态变量是一个常见的操作,可以使用上述两种方式来实现。需要注意的是,赋初值并不意味着该初值一定是0,除非明确给变量赋上初值。