内存四区
1、正文段或者代码段: 程序运行时的代码, 只读的
2、数据段:
未初始化数据段: 存储未初始化的静态变量或者全局变量, 系统会自动初始化为0
初始化数据段: 存储初始化的静态变量或者全局变量
常量区: 常量 、const 修饰的静态变量和全局变量
3、堆: 程序员自己进行管理的,使用时需要申请,使用完需要释放内存
4、栈:局部变量、形参、保护现场 ps:栈区不会自动初始化的
int g_num = 99;
int main()
{
static int b;
const int a;//存在栈区
const static int c = 0;
int *p = &c;
*p = 10;
return 0;
}
const
防止变量被恶意修改
enum
1、定义枚举,本质就是定义一组常量
2、语法:
enum 名称{
常量1,
常量2,
...
常量n,
};
3、默认常量值从0开始, 后面依次递增, 也可以手动设置常量值
4、枚举是占内存空间的, 可以使用gdb查看 (p \d 常量名称)
extern :
1、全局变量的声明
2、外部函数的声明
static :
1、修饰变量, static修饰的变量称为静态变量, 生存期是程序开始----》程序结束都是存在的
静态局部变量作用域: 在定义的函数内部
静态全局变量作用域: 定义的.c文件内部
2、修饰函数, 静态函数,只能在定义的.c文件内部调用,不能被其他.c文件调用
malloc
申请内存: malloc
释放内存: free
注意事项:
1、内存越界
2、内存泄露: 不用的内存空间,要及时释放
3、二次释放: 不要二次释放
4、释放完内存之后,要记得将指针指向NULL
一级指针: 让普通变量得到地址传参
二级指针: 让一级指针变量得到地址传参