所以在我的C文件我有一个变量:静态变量
static int32_t currentAddress = 0x00000000;
我在想,如果我用currentAddress设置比如说一个结构中的字段为0 然后说我增加currentAddress别处, A内的领域也会改变吗?
基本上我不明白什么静态在这种情况下,以及何时使用它。
所以在我的C文件我有一个变量:静态变量
static int32_t currentAddress = 0x00000000;
我在想,如果我用currentAddress设置比如说一个结构中的字段为0 然后说我增加currentAddress别处, A内的领域也会改变吗?
基本上我不明白什么静态在这种情况下,以及何时使用它。
A内的字段将获得currentAddress的当前值,即0。稍后更改currentAddress不会影响A的字段,除非您再次为该字段指定currentAddress,此时A的字段将具有currentAddress的新值。
声明者static
设置变量currentAddress的作用域和生命周期。您没有指定currentAddress是在文件范围内还是在函数内。无论哪种方式,变量将保留其值,除非您修改它。
它在文件范围内。谢谢! –
如果您提到,valie会从currentAddress复制到您要分配给的变量中。所以,改变currentAddress的值,不会改变其他值。
在C中,静态限制变量对当前翻译单元的可见性(简单来说,在当前源文件中,如果项目有多个源文件)。另外,它不会在退出其范围时销毁变量,因为它会发生在非静态变量中。例如:
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等等),因为变量不会被销毁。另请注意,变量访问规则将被保留:bar栏中的a栏不能被访问。
C'static'只是一个范围操作符,变量'currentAddress'只在当前文件中可见。如果'struct A'中的字段是'int32_t',那么如果修改'currentAddress',它将不会改变。 –
最好不要有静态变量。 – piokuc
对不起......为什么最好不要有静态变量?也许你的意思是最好不要有模块级变量。但是如果你想拥有它们,有充足的理由选择它们是静态的。 –