一维动态数组和二维动态数组的创建和使用
Posted lytwajue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一维动态数组和二维动态数组的创建和使用相关的知识,希望对你有一定的参考价值。
#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个数据值
*/
}
以上是关于一维动态数组和二维动态数组的创建和使用的主要内容,如果未能解决你的问题,请参考以下文章