我们目前知道内存中几个常见的区
1.栈区
2.堆区
3.静态区
.........
我们先来看看目前已知的在内存中是如何开辟空间的
int a;//向栈区申请4个字节的内存
int arr[5];//向栈区申请20个字节的内存
我们会发现,数组的开辟多少空间是要提前设置好的,那么我们会不会有时候确定不了需要的字节呢
我们来举一个例子
struct Stu
{
char name[20];
int age;
int scort[10];
}
我们创建了一个有十个元素的整形数组用来存放学生的成绩,我们就向内存申请了40个字节用来存放成绩。
但是如果我们需要录入的成绩有12门怎么办,或者只有5门成绩那么剩下的内存空间该何去何从?
有的人会有这样的想法,我们可不可以这样
int n;
scanf("%d",&n);
int scort[n];
我们创建一个变量来让用户自己确定数组大小,输入5就创建一个5个元素的数组。
虽然理想很丰满,但是现实很骨感(目前只有在c99支持这样的创建)。
所以这个方法就无法在所有的编译器中实现
这时我们就要引入一个全新的知识
动态内存
1.动态内存函数
(1)malloc和free