目录
知识点1:普通局部变量、普通全局变量、静态局部变量、静态全局变量
2、函数可以返回静态局部变量的地址 (因为静态局部变量在函数结束后不被释放)
知识点1:普通局部变量、普通全局变量、静态局部变量、静态全局变量
-
普通局部变量
定义形式: 在{ }里面定义的变量就是局部变量
作用范围: 离他最近的{ }之间
生命周期: 离他最近的{ }结束局部变量就被释放
存储空间: 栈区
注意事项: 局部变量不初始化内容随机,不同作用范围的局部变量可以同
-
普通全局变量
定义形式: 在函数外定义的变量就是普通全局变量
作用范围: 当前源文件以及其他源文件(加extern修饰)
生命周期: 整个进程
存储空间: 全局区
注意事项:
//普通全局变量不初始化内容为0
//普通全局变量和普通局部变量同名(就近原则)
-
静态局部变量(static修饰的局部变量)
静态局部变量
定义形式:{}里面定义 且static修饰 就是静态局部变量
作用范围:离他最近的{}之间有效
生命周期: 整个进程
存储空间:全局区
注意事项:
普通全局变量 不初始化 内容为0
静态局部变量 如果初始化语句执行多次 只有第一次有效
-
静态全局变量
静态全局变量
定义形式: 函数外定义且static修饰 就是静态全局变量
作用范围: 只能在当前源文件有效
生命周期: 整个进程
存储空间: 全局区
注意事项: 静态全局变量不初始化内容为0
-
普通函数 与 静态函数(加static修饰)
普通函数:当前源文件 以及其他源文件(extern 修饰) 都可以使用
静态函数:只能在当前原文件使用
知识点2:内存的分区详解
知识点3:内存操作注意事项
-
1、函数不要返回局部变量的地址。
-
2、函数可以返回静态局部变量的地址 (因为静态局部变量在函数结束后不被释放)
-
3、 不要操作 已经被释放的堆区空间。
-
4、不要重复释放同一段堆区空间。
知识点6:函数内部给外部指针变量申请空间
1、p没有指向有效空间
2、解决上述问题:通过返回值
函数返回值与外部指针变量是同一级别的指针
3、解决上述问题:将 &p传递给函数