一维动态数组和二维动态数组的创建和使用

#include<stdio.h>
#include<malloc.h>
void main(){


int *a,n=10,i;
/*
calloc()函数的原型是:(void *)calloc(unsigned n,unsigned size)
calloc()函数用于向系统动态申请n个,每一个占sizege字节的内存单元,函数返回值为所申请的内存空间首地址
malloc和calloc主要差别在于,当系统的内存仅仅剩下一些很小的碎片时。用calloc函数设计的动态数组的时间效率优于
用malloc函数设计的动态数组的时间效率
*/
//动态申请n歌int型的的内存空间由指针a指示首地址
a=(int *)calloc(n,sizeof(int));
for(i=0;i<n;i++){

a[i]=i+1;//数组元素赋值
}


for(i=0;i<n;i++){

printf("%d  ",a[i]);//数组元素输出
}


printf("\n");
free(a);//动态释放指针a所指向的n歌内存空间

}







二维动态数组的创建和使用

#include<stdio.h>
#include<malloc.h>




//创建二维动态数组的函数
int **Make2DArray(int row,int col){


//创建row行col列的二维动态数组,函数返回其首地址
int **a,i;
//动态申请row个int类型的内存空间。有a指示
a=(int **)calloc(row,sizeof(int *));
//循环row次,动态申请col个int类型的内存空间,由a[i]指示
for(i=0;i<row;i++){

a[i]=(int *)calloc(col,sizeof(int));
}


return a;
}






//释放二维动态数组的函数
void Deliver2DArray(int **a,int row){
//释放二维动态数组a的内存空间,row为数组的行数
int i;
for(i=0;i<row;i++){

free(a[i]);
}


free(a);
}






void main(){


/*
int *a,n=10,i;

calloc()函数的原型是:(void *)calloc(unsigned n,unsigned size)
calloc()函数用于向系统动态申请n个,每一个占sizege字节的内存单元,函数返回值为所申请的内存空间首地址
malloc和calloc主要差别在于,当系统的内存仅仅剩下一些很小的碎片时,用calloc函数设计的动态数组的时间效率优于
用malloc函数设计的动态数组的时间效率

//动态申请n歌int型的的内存空间由指针a指示首地址
a=(int *)calloc(n,sizeof(int));
for(i=0;i<n;i++){

a[i]=i+1;//数组元素赋值
}


for(i=0;i<n;i++){

printf("%d  ",a[i]);//数组元素输出
}


printf("\n");
free(a);//动态释放指针a所指向的n歌内存空间
*/






//二维动态数组
int i,j,c;
int row=3,col=4,**a;
a=Make2DArray(row,col);
c=1;
for(i=0;i<row;i++){

for(j=0;j<col;j++){

a[i][j]=c;//数组元素赋值
c++;
}
}






for(i=0;i<row;i++){

for(j=0;j<col;j++){

printf("%5d",a[i][j]);//显示数组元素
}


printf("\n");
}






Deliver2DArray(a,row);
/*
realloc()函数的原型是:(void *)realloc(void *p,unsigned size)
realloc()函数的功能是。将指针p所指向的已分配内存区的大小改为size,函数返回新分配内存区
的首地址。size既能够比原来分配的内存区大,也能够比原来分配的内存区小。
新分配的内存区中原样保存原内存区的数据值。当新分配的内存区设为size2小于原分配的内存区size1时
新分配内存区中原样保存原分配内存区中前size2个数据值
*/

}
















posted @ 2017-06-29 15:25  lytwajue  阅读(261)  评论(0编辑  收藏  举报