关于动态数组的愚见

动态数组的简单认识:

 

    动态数组的内存空间是从堆动态分配的。是通过执行代码而为其分配存储空间。当程序执行到我们编写的分配语句时,才为其分配。对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则将会引起内存泄露。但其使用非常灵活,能根据程序需要动态分配大小。所以相对于静态数组的来说我们对于使用动态数组有很大的自由度。

 

#include <stdio.h>

#include <stdlib.h>

int main()

{

int n;

int i;

int *arr;

printf("请输入所要创建的一维动态数组的长度:");

scanf("%d",&n);

arra=(int*)calloc(n,sizeof(int));// 此处的array其实就是动态数组的数组名,平常说数组名就是数组首地址,那么这里动态申请的内存也就是数组的大小。。。

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

{

printf("%d\t",arr[i]);

}

printf("\n");

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

{

arr[i]=i+1;

printf("%d\t",arr[i]);

}

free(arr);

return 0;

}

 只是为了简单的测试对于动态数组的浅显认识,因此一个简单的代码。当然,这只是动态一维的,  二维的动态数组和一维的相类似。

众所周知,二维数组一般行主序arr[i][j],  其实动态的二维数组的建立和一维一样,首先先建立“行”在建立“列”。

测试代码:

int main() 

{

int n1;

int n2

int **arr;

int i;

int j

printf("请输入所要创建的动态数组的第一维长度:");

scanf("%d",&n1);

printf("请输入所要创建的动态数组的第二维长度:");

scanf("%d",&n2); 

arr=(int**)malloc(n1*sizeof(int*)); //"

for(i=0;i<n1i++) 

arr[i]=(int*)malloc(n2sizeof(int));// 

}

for(i=0;i<n1;i++)

{

for(j=0;j<n2;j++) 

arr[i][j]=i*n2+j+1; 

printf("%d\t",arr[i][j]); 

printf("\n");

}

for(i=0;i<n1;i++) 

free(arr[i]);//释放列 

free(arr);//释放行 

return 0; 

}

 

在建立动态数组时,特别是多维的时,一定需要注意应该从外到内。比如:arr=(int**)malloc(n1*sizeof(int*));  这是建立“行”。然后再用一个for循环逐次建立“列”, 比如:for(i=0;i<n1i++) 

arr[i]=(int*)malloc(n2sizeof(int));// 

}

 

 

建立完当然就是释放了。释放时刚好与建立时的顺序相反,由内到外,先释放“列”比如:for(i=0;i<n1;i++) 

free(arr[i]);//释放列 

然后再释放“行” ,比如:free(arr);//释放行 

 

 

所以说,建立动态数组的方法是一定的,不论是几维的。



由于初学水平有限,请多提意见,一起交流。。。

 

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值