第5周:程序结构——5.1 全局变量

1.全局变量

定义在函数内部的变量为本地变量;定义在函数外面的变量是全局变量

本地变量的生存期和作用域一致,都在函数内部;全局变量具有全局的生存期和作用域。它们与任何函数都无关,在任何函数内部都可以使用它们。

全局变量的初始化

没有做初始化的全局变量编译器会自动给它补上 0 值指针会得到 NULL 值本地变量一定要初始化!!

只能用编译时刻已知的值来初始化全局变量。全局变量的值不应该和另一个全局变量联系在一块

它们的初始化发生在 main 函数之前

被隐藏的全局变量

如果函数内部存在与全局变量同名的变量,则全局变量被隐藏。

在更小的地方,可以重新定义更大地方曾经出现过的变量,把它隐藏。


2.静态本地变量

在本地变量定义时加上 static 修饰符就成为静态本地变量当函数离开的时候,静态本地变量会继续存在并保持其值

静态本地变量的初始化只会在第一次进入这个函数时做。以后进入函数时会保持上次离开时的值。不会被重新初始化。

静态本地变量实际上是特殊的全局变量。它们位于相同的内存区域(与全局变量紧挨)。

静态本地变量具有全局的生存期,函数内部的局部作用域。static 在这里的意思是局部作用域(仅本地可访问)。


3. TIPS

返回指针的函数

返回本地变量的地址是危险的,一旦离开函数,本地变量不存在(不受控),地址分配给别人使用。

返回全局变量或静态本地变量的地址是安全的(地址与函数无关)。

返回在函数内 malloc 的内存是安全的,但是容易造成问题。

最好的做法是返回传入的指针

不要使用全局变量在函数间传递参数和结果

尽量避免使用全局变量(使用全局变量和静态本地变量的函数是线程不安全的)。

你可能感兴趣的:(第5周:程序结构——5.1 全局变量)