本文有三个部分:
(一)传统数组的缺点
(二)为什么需要动态分配内存
(三)如何构建动态数组
(一)传统数组的缺点
1.数组的长度定义时就要定好了,且只能是常数,不能是变量,比如下面的例子
数组可以这样定义
int a[5];
而不可以这样定义
int len = 5;
int a[len];
2.系统在传统数组被定义时分发给他的内存,不能手动释放,只能等待程序运行完之后才能有系统自动释放
3.传统数组的长度不能再程序运行期间动态的扩充或缩小
4.不能跨函数使用,比如说,A函数定义的数组,在A函数运行期间的数组可以通过指针变量被其他函数使用,但A函数被调用之后,内存被释放掉了,主调函数就不能使用A函数定义的数组了。
#include <stdio.h>
void f()
{
int a[3]={1,2,3};
g(a);
printf("%d\n",a[1]);//数组可以被使用,因为修改了值,2被g函数改为88了
}
void g(int *p)
{
p[1]=88;
}
int main()
{
f();
printf("%d\n",a[1]);//f函数被调用完了,里面的数组的内存被释放掉了,这里不能用数组a了,所以这个语句是错的
return 0;
}
(二)为什么需要动态分配内存?当然是因为传统数组的缺点了