例子:
//malloc: memory(内存) allocate(分配)的缩写
#include <stdio.h>
#include <stdlib.h> //或者写成 #include <malloc.h>
int main()
{
int * p1 = (int *)malloc(12); //要使用先加头文件#include <stdlib.h>
//或者写成 #include <malloc.h>
/*
1. 动态构造了12个字节个内存地址,但是malloc函数只返回第一个字节的地址
2. 为了表示此块地址的数据类型,因此使用了强制类型转换
3. 此例转换成了int 类型的,占4个字节
4. 所以int指针变量p1保存了前4个字节(第一个元素)的第一个的地址
5. p1 = &p1[0], p1指向p1[0]
*/
//与静态数组对比 :int p2[3];
/*
1. 数组是静态的
2. 数组是int 类型的,占4个字节,共12个字节
3. p2是数组名,保存的是第一个元素的第一个地址,而第一个元素占四个字节
4. 即p2 = &p2[0], p2指向p2[0]
*/
free(p1); //使用free函数进行释放
return 0;
}
结论
相同点:
可以看出使用malloc函数动态分配的数组和静态分配的他们效果是相同的
不同点:
动态分配的内存在某个函数内执行完毕不会释放,因此动态内存可以跨函数使用
动态分配的内存需要手动释放【重要】,不释放可能造成占用内存的问题
静态分配的内存在某个函数内执行完毕系统自动释放,因此静态内存不可以跨函数使用