C语言学习-翁凯(第十二章笔记)
C语言-第十二章
12.1.1全局变量:定义在函数之外的变量,全局的生存期和作用域
全局变量
- 定义在函数外面的变量是全局变量
- 全局变量具有全局的生存期和作用域
- 它们与任何函数都无关
- 在任何函数内部都可以使用它们
全局变量初始化
- 没有做初始化的全局变量会得到0值
- 指针会得到NULL值
- 只能用编译时刻已知的值来初始化全局变量
- 它们的初始化发生在main函数之前
被隐藏的全局变量
- 如果函数内部存在与全局变量同名的变量,则全局变量被隐藏
12.1.2 静态本地变量:能在函数值后继续保有原值的本地变量
静态本地变量
-
在本地变量定义时加上static修饰符就成为静态本地变量
-
当函数离开的时候,静态本地变量会继续保持其值
-
静态本地变量的初始化只会在第一次进入这个函数时做,以后进入函数时会保持上次离开时的值
-
静态本地变量实际上是特殊的全局变量
-
它们位于相同的内存区域
-
静态本地变量具有全局的生存期,函数内的局部作用域
- static在这里的意思是局部作用域(本地可访问)
12.1.3 全局变量贴士:后记-返回指针的函数,使用全局变量贴士
*返回指针的函数
- 返回本地变量的地址是危险的
- 返回全局变量或静态本地变量的地址是安全的
- 返回在函数内malloc的内存是安全的,但是容易造成问题
- 最好的做法是返回传入的指针
tips
- 不要使用全局变量来在函数间传递参数和结果
- 尽量避免使用全局变量
- 丰田汽车的案子
- *使用全局变量和静态本地变量的函数是线程不安全的
12.2.1 宏定义
编译预处理指令
- #开头的是编译预处理指令
- 它们不是C语言的成分,但是C语言程序离不开它们
- #define用来定义一个宏
#define
- #define<名字><值>
- 注意没有结尾的分好,因为不是C的语言