为什么要使用动态内存?
静态数组存在的问题:1.不能根据变量n动态申请内存
2.不能申请大块内存
动态内存:
1.动态内存有什么用?
1.1:可以根据变量n动态申请数组
2.怎么使用动态内存?
2.1:malloc(90%):申请动态内存(从堆内),有可能失败,返回NULL(1.堆内空间不够 2.堆内空间足够,但是连续空间不够)
2.2:calloc(1%): 在malloc的基础上,将初始值全部变成0
2.3:realloc(9%) 重新从堆内申请动态内存
3.为什么要释放动态内存?(防止内存泄露)
4.注意事项?
4.1: malloc的时候,前面的强转和后面的sizeof内的类型不一致,sizeof里面没有*星号
4.2:calloc注意,两个参数不要写反
4.3:realloc注意:第一个参数需要填写原先内存的开头地址
第二个参数需要的是重新开辟的总字节数,不是在原先内存的基础上扩充的字节数
malloc代码示例:
int* p1 = (int*)malloc(10 * sizeof(int)); //x*y x:申请空间个数 y:申请空间单个大小
char* p2 = (char*)malloc(20 * sizeof(char));
double* p3 = (double*)malloc(100 * sizeof(double));
realloc代码示例:
//在上面malloc的基础上都扩容两倍
p1 = (int*)realloc(p1, 10 * sizeof(int) * 2);
p2 = (char*)realloc(p2, 2 * 20 * sizeof(char));
p3 = (double*)realloc(p3, 2 * 100 * sizeof(double));