📜  在C中初始化静态变量(1)

📅  最后修改于: 2023-12-03 15:23:22.888000             🧑  作者: Mango

在C中初始化静态变量

静态变量是指在函数内部或全局范围内定义的变量。静态变量在程序生命周期中只被初始化一次,之后每次调用该函数或访问该变量时,该变量都会保留其上一次的值。

在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,除非明确给变量赋上初值。