c文件中的静态变量

时间:2013-11-20 20:03:13

标签: c static

所以在我的c文件中我有一个变量:

static int32_t currentAddress = 0x00000000;

我想知道我是否使用currentAddress将struct A中的字段设置为0。 然后说我在其他地方增加currentAddress,A中的字段也会改变吗?

基本上我不明白静态在这种情况下做什么以及何时使用它。

2 个答案:

答案 0 :(得分:2)

A中的字段将获取currentAddress的当前值,即0。稍后更改currentAddress不会影响A的字段,除非再次为该字段分配currentAddress,此时A的字段将具有新的currentAddress的值。

static声明符设置变量currentAddress的范围和生命周期。您还没有指定currentAddress是在文件范围内还是在函数内。无论哪种方式,变量都将保留其值,除非您修改它。

答案 1 :(得分:1)

如果您提到,将valie从currentAddress复制到您要分配的变量中。因此,更改currentAddress的值不会更改其他值。

在C中,static限制变量对当前翻译单元的可见性(简单来说,在当前源文件中,如果项目有多个源文件)。此外,它不会在退出范围时销毁变量,因为它会在非静态变量中发生。例如:

int foo(){
    int a = 0;
    a++;
    return a;
}

int bar(){
    static int a = 0;
    a++;
    return a;
}

对foo()的每次调用都返回1,因为变量a被创建,递增,返回和销毁。但是,每次调用bar()都会增加返回的值(它首先返回1,然后返回2,3,4等),因为a变量不再被销毁。另请注意,保留了变量访问规则:无法在bar函数外部访问a from栏。