全局变量——在静态区开辟内存
局部变量——在 栈区开辟内存
创建全局数组——在静态区开辟内存
创建局部数组——在栈区开辟内存
char arr[10]={0};
给了我们一个能够存放10个字节的连续内存空间,那么如果我们有5个char 类型的数据要储存,那么就要浪费剩余的内存空间,如果我们有20个 char 类型的数据要存储,那么arr数组的空间又不够我们存放数据。
但是,对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那么数组在编译时开辟空间的方式就不能满足了。这个时候,我们只能试试动态内存开辟。
动态内存函数介绍
1.malloc
功能: 开辟一个内存块
参数: 开辟空间的字节大小
返回类型: void * 空指针类型
2.free
当动态申请的空间不再使用的时候,就应该还给操作系统。
所以我们要将malloc申请的空间进行释放
free(p);
p=NULL;
// p被释放,所以p指向的空间没有了意义,但是那块空间的内容还在,所以p还是有能力找到这块空间,为了避免这块空间被错误使用,我们将p=NULL,赋成空指针,这样就p指针就断开与这块空间的联系。
3.calloc
开辟一个内存中连续的空间并将空间里的每个字节初始化为0
第一个参数:元素的个数 第二个参数 :每个元素的字节大小
返回类型: void * 空指针类型
4.realloc
功能: 重新分配内存空间,调整之前开辟动态内存空间的大小
参数: 第一个参数 是之前开辟内存块的地址 ,第二个参数 是调整后空间的字节大小。
返回类型: void * 空指针类型
柔性数组
C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组的成员。
特点:
1.结构中的柔性数组成员前边必须至少有一个其他成员。
2.sizeof返回的这种结构大小不包括柔性数组的内存
3.包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。
优势:
1.方便内存释放
2.有利于访问速度