传统数组的缺点
数组的长度必须事先进行指定,且只能是常整数,不能够是变量
例如
int a[5]; //这是正确的
int len;
int a[len]; //这是错误的。传统的数组不能够是变量
传统形式定义的数组。该数组在内存中的空间,程序员无法手动进行释放。在一个函数运行期间,系统为该函数中数组分配的空间会一直存在,直到该函数运行结束时,该数组的空间才会被系 统释放。
例如
#include<stdio.h>
void f(void)
{
int a[4]={1,2,3,4};
return;
}
int main(void)
{
f();
return 0;
}
//数组 a 在内存中的空间会一直存在 ,直到函数 f 执行完成,系统才会释放内存中数组的空间。
数组的长度一旦定义就不能够进行更改
数组的长度不能在函数的运行过程中,动态的扩充或者缩小
A函数定义的数组,在A函数运行期间可以被其他函数进行使用。在A函数终止后,A函数中的数组就不能够被其他函数进行使用
例如:
#include<stdio.h>
void g(int* parr,int len)
{
parr[3]=88;
}
void f(void)
{
int a[4]={1,2,3,4};
g(a,4);
printf("a[3]=%d\n",a[3]);
}
int main(void)
{
f();
return 0;
}
/*
上面程序就说明了,一旦 f 函数终止了,g 函数中调用的 f 函数中数组 a 就会失败,
*/
总结一下就是:
传统函数定义的数组不能够跨函数使用。
为什么需要动态分配内存
动态数组很好的解决了传统数据的缺陷。
传统数组也叫静态数组。
动态内存分配举例——动态数组的构造
1. 首先我们来讲讲malloc函数
malloc函数是 memory(内存) allocate(分配)的缩写。也就是内存分配函数。
举个例子
#include<stdio.h>