①malloc作为一个包含在<stdlib.h>头文件下的函数,用于申请空间。
②我们平常定义数组一般习惯性的就直接定义,比如int a[5],此处就是直接定义了一个数组,数组内的元素都是int型,并且有五个,从一开始就确定了数组a的大小,并且无法被改变。并且变量被存放在栈区,栈区的变量都是有系统自己开辟空间存储,自动销毁空间释放的。
③其实,还有一种定义数组的方式,那就是借助人为申请空间的方式定义一个数组。请看如下程序:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *a = (int *)malloc(sizeof(int[5]));
a[0]=1;
a[1]=2;
a[2]=3;
a[3]=4;
a[4]=5;
int i;
for(i=0;i<5;i++)
{
printf("%d ",a[i]);
}
free(a);
return 0;
}
④定义的方法是首先得定义一个指针,然后在这个指针的指向下,利用malloc去开辟一个自定义大小的空间。
⑤此方法定义的数组变量被存放在堆区,是由用户自己开辟和释放的。
⑥下面来看结果运行结果:
可见结果是理想无误的。
⑦使用这种定义方式可根据变量 n 动态申请内存,不会出现存储空间浪费的问题。但是,如果程序执行过程中出现空间不足的情况时,则需要加大存储空间,此时需要进行如下操作:
1.新申请一个较大的内存空间,即执行int * temp = new int[m];
2.将原内存空间的数据全部赋值到新申请的内存空间中,可以使用memecpy函数;
3.将原来的堆空间释放,即执行delete [] p; p = temp;
⑧当然,如果是在C++中,可以使用标准模板库(STL),像vector可以很方便