所以在我的c文件中我有一个变量:
static int32_t currentAddress = 0x00000000;
我想知道我是否使用currentAddress将struct A中的字段设置为0。 然后说我在其他地方增加currentAddress,A中的字段也会改变吗?
基本上我不明白静态在这种情况下做什么以及何时使用它。
答案 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栏。