静态数组的缺点:
1.数组长度必须事先指定而且必须是整形
2.长度一旦被定义之后不能在函数运行是动态的改变大小
3.静态数组无法跨函数使用
4.静态数组无法手动释放必须等到程序结束才能回收内存
5.传静态数组是连续性存储需要连续的内存空间占内存资源
Voidtest()
{
int a[5]={1,2,3,4,5};//无法手动释放这20个字节的数据
//只能有函数结束时由系统回收
}
Intmain()
{
return 0;
}
而动态数组很好的解决了这些问题。
# include <stdio.h>
# include <stdlib.h>
int main()
{
int a[5]; //如果int占4个字节的话,则本数组总共包含有20个字节,每四个字节被当做了一个int变量来使用
int len;
int * array;
int i;
//动态的构造一维数组
printf("请输入你要存放的元素的个数: ");
scanf("%d", &len);
array = (int *)malloc(4 * len); // 动态的构造了一个一维数组, 该一维数组的产度是len, 该数组的数组名是array,该数组的每个元素是int类型 类似于 int pArr[len];
//对动态一维数组进行赋值
for (i=0; i<len; ++i)
scanf("%d",&array[i]);
//对位一维数组进行输出
printf("一维数组的内容是:\n");
for (i=0; i<len; ++i)
printf("%d\n",array[i]);
free(array); //释放掉动态分配的数组 如果不释放会内存泄露
return 0;
}
对于malloc的用法
# include <stdio.h>
# include <stdlib.h>
void f(int * q)
{
*q = 200;
//free(q); //把q所指向的内存释放掉 本语句必须的注释掉,否则会导致代码出错
}
int main()
{
int * p = (int*)malloc(sizeof(int)); //sizeof(int)返回值是int所占的字节数
*p = 10;
printf("%d\n", *p); //10
f(p); //p是int*类型
printf("%d\n", *p); //200 第20行
return 0;
}