C/C++中全局变量与局部变量的关系
- 全局变量与局部变量可以重名,在某个函数内引用变量时,会用到局部变量而不是全局变量,可以理解为“就近原则”。
- 当一个函数体内有多个局部变量时,这些局部变量的作用于就限定在函数体内的更小一级区域,比如函数体内有两个循环体,在两个循环体内都定义了局部变量val,则val的作用域就为循环体内而不仅仅是函数体内。
- 重名情况下如果要使用全局变量,则需要使用作用域运算符(::),将该作用域运算符放在重名变量之前。
- 全局变量可以被多个.C与.CPP文件使用,但要以static限定作用域为仅在本源文件中,也可在不同文件中声明,但只能允许在一处地方声明。
- static放在全局变量之前构成静态全局变量,这与普通全局变量相比,在存储方式上都是静态存储方式,区别在于作用域。静态全局变量的作用域为定义该变量的源文件,所在在同一源程序下的其他源文件是无法使用该变量。而普通全局变量的作用域为整个源程序。一个源程序可以由多个源文件组成。
- static放在局部变量之前构成静态局部变量,这与普通局部变量相比,作用域相同,区在于存储方式。静态全局变量为静态存储,而局部变量为动态存储。
- 全局变量、静态局部变量、静态全局变量都存放在静态数据存储区。局部变量存放在栈区。
- 当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。因为局部变量在函数调用后就销毁了,虽然地址还在,但是那个地址存的数据是无法保证安全性的。
时间: 2025-01-02 04:27:12