很多使用变量犯的错误,都与标题谈到的两个问题有关。
一般来说,局部变量只在block内有效,全局变量在整个文件内都有效,不过出错往往都出在特殊的情况下。
今天看到一个知识点,在函数内定义的被static修饰的变量,如果函数执行的时候该变量的值被修改了,那么下次调用该函数的时候,该变量的值会保持为上次被修改后的值。也就是说,如果在函数中定义了static变量的时候,调用函数的时候,要注意这个变量的值的变化,否则可能产生逻辑错误。
要把这个问题弄清楚,可以从static变量的生存期和存储区入手,定义为static的变量,存储在静态存储区域,而每次调用函数的时候,给函数执行分配的区域是动态区域,函数执行完之后,这些存储空间会被释放掉。static变量不存储在动态存储区内,所以函数每次执行完之后,静态变量不会被释放,而会保持函数执行过后的值不变。