动态数组
定义:
利用“指针”和“内存空间分配函数”,根据用户的需求,动态且恰当地利用内存空间。
优点:
能够有效地利用内存空间。
缺点:
创建方式麻烦,使用时易混淆,且最后需要释放内存空间(否则易造成内存泄漏,而数组不用)。
使用原则:
1. 创建需从外到里。
2. 释放需从里到外。(释放指针所指向的空间,free函数接受的参数是指针)
使用方法:
以三维数组int array[n1][n2][n3]={0}为例,其对应的动态数组的创建如下:
int n1,n2,n3,i,j,k;
int ***array; //创建一个动态的三维数组需声明一个三维指针array。
/*创建从外到里*/
array = (int***)calloc(n1,sizeof(int**));
for(i=0;i<n1;i++)
{
array[i] = (int**)calloc(n2,sizeof(int*));
for(j=0;j<n2;j++)
{
array[i][j]=(int*)calloc(n3,sizeof(int));
/*此层循环是初始化动态数组(为数组赋值),而外两层是为动态数组分配内存空间。*/
for(k=0;k<n3;k++)
array[i][j][k]=0; //array[i][j][k]存储的是一个int值
}
}
/*释放从里到外*/
for(i=0;i<n1;i++){
for(j=0;j<n2;i++)
free(array[i][j]);
free(array[i]);
}
Free(array);
以二维数组int array[n1][n2]={0}为例,其对应的动态数组创建如下:
int n1,n2,i,j;
int** array; //创建一个动态的二维数组需要声明一个二维指针array。
array=(int**)calloc(n1,sizeof(int*));
for(i=0;i<n1;i++)
{
array[i]=(int*)calloc(n2,sizeof(int));
for(j=0;j<n2;j++)
array[i][j]=0;
}
/*释放从里到外*/
for(i=0;i<n1;i++)
free(array[i]);
free(array);
以一维数组int array[n1]=0为例,其对应的动态数组创建如下:
int n1,i;
int* array; //创建一个动态的一维数组需要声明一个一维指针array。
/*创建从外到里*/
array=(int*)calloc(n1,sizeof(int));
for(i=0;i<n1;i++)
array[i]=0;
/*释放从里到外*/
free(array);
思考:
1. 指针和数组的区别。
2.声明和定义的区别。
声明只是创建了某个类型的变量,并且告知编译器。而定义是在声明的基础上,还为变量分配内存空间。所以创建一个数组不能说声明一个数组,而应该说定义一个数组。
3. malloc和calloc的使用。
同:都能分配内存空间,并返回一个指针(地址),函数头都是<stdlib.h>。
异:
1.malloc只能接受一个参数,calloc接受两个参数,但使用效果可以相同。如: malloc(num*sizeof(type))和calloc(num,sizeof(type));
2.当成功分配内存空间时,calloc首先会将内存空间存储的值初始化为0,而malloc不会。
分享到:
相关推荐
VBA动态数组VBA动态数组VBA动态数组VBA动态数组VBA动态数组VBA动态数组VBA动态数组VBA动态数组VBA动态数组
如何在vc中创建动态数组建立一维的,二维的,动态数组
这里说的动态数组是可以根据需要动态增长占用内存的数组,比如程序初始分配了100个元素,可是运行了一段时间后区区100个空间不能满足了,现在需要400个,怎么办呢;那肯定需要再额外分配300个。 C语言有realloc()...
java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组java动态数组
摘要:Delphi源码,系统相关,动态数组,计数机制 本Delphi示例用于说明动态数组的引用计数机制基于变量而非元素。输出结果是这样的: ______________________________________________________ aba aba ...
vc++6.0中动态数组实现(例如string类对象数组等)[文].pdf
多维动态数组(不等宽)多维动态数组(不等宽)多维动态数组(不等宽)多维动态数组(不等宽)多维动态数组(不等宽)多维动态数组(不等宽)多维动态数组(不等宽)
从一个文件中读取数据,然后保存到一个动态的数组中,这个动态数组是动态申请的,而不是静态的数组。
VB 动态数组实例 VB 动态数组实例 VB 动态数组实例
动态数组类模板Array C++ //数组类模板声明 template class Array { public: Array(int sz = 50); Array(const Array<T> &A); ~Array(void); Array<T>& operator = (const Array<T> &rhs;); //重载=,使数组...
本文讲述了如何用C语言也能创建动态数组的技巧,通过代码实例来演示分析,让你进一步了解数组的动态创建技巧与代码的艺术。
摘要:Delphi源码,系统相关,动态数组,静态数组 本示例用于演示静态数组变量与动态数组变量的不同。 输出结果是这样的: ______________________________________________________ 256256 4 ____...
利用指针来实现动态数组,求两个集合的交集和并集。(要求用动态数组来实现)依次分别输入数组A、B长度,并输入A,B中元素,即可得到交集并集
C语言动态数组
该项目利用c语言的malloc函数实现了一维和二维动态数组的创建,并且二维数组采用了两种方式。该项目对了解程序的内存分配具有很好的益处。
关于VB中的数组教程,数组的概念,动态数组的建立与声明
动态数组优点是它可以根据程序运行时状态的不同而随时改变容量,本文主要介绍C++中使用类模板实现动态数组
插入排序算法(动态数组实现) printf("--------插入排序算法的实现--------\n"); printf("输入数组的大小length:\n"); int length=0; scanf("%d",&length); /****动态分配内存初始化数组*********************...
顺序表 结构体的动态数组c++指针实现 typedef struct{/*动态顺序表*/ int last,max;/*尾元下标和预留表长*/ DataType *data;/*动态数组的基址*/ }SeqList;
用C语言中的malloc函数和free函数实现的动态数组,分三个文件