关于动态数组的愚见
来源:互联网 发布:spss数据分析案例 编辑:程序博客网 时间:2024/06/07 12:03
动态数组的简单认识:
动态数组的内存空间是从堆动态分配的。是通过执行代码而为其分配存储空间。当程序执行到我们编写的分配语句时,才为其分配。对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则将会引起内存泄露。但其使用非常灵活,能根据程序需要动态分配大小。所以相对于静态数组的来说我们对于使用动态数组有很大的自由度。
#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<n1; i++)
{
arr[i]=(int*)malloc(n2* sizeof(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<n1; i++)
{
arr[i]=(int*)malloc(n2* sizeof(int));//列
}
建立完当然就是释放了。释放时刚好与建立时的顺序相反,由内到外,先释放“列”比如:for(i=0;i<n1;i++)
{
free(arr[i]);//释放列
}
然后再释放“行” ,比如:free(arr);//释放行
所以说,建立动态数组的方法是一定的,不论是几维的。
由于初学水平有限,请多提意见,一起交流。。。
- 关于动态数组的愚见
- 关于list的愚见
- 关于AsyncTask的一点愚见
- 关于IPC的一点愚见
- 关于Scoket的一些愚见
- 关于Activity的一点愚见
- 关于数模中编程的一点愚见
- 关于数模中编程的一点愚见
- 关于智能机器人的一些愚见
- 关于BinderPool Binder连接池的愚见
- 关于Android动画的一点愚见
- 关于activity启动流程的一点愚见
- 关于CSDN博客 文章管理 的几点愚见
- 个人关于命令行工具用户界面设计的愚见
- 关于Notification通知的一点愚见(自定义通知栏)
- 关于Notification的一点愚见(PendingIntent工作流程)
- 关于RemoteView的一点愚见(实现桌面小部件)
- 关于动态数组的问题
- myeclipse断点失效
- Block
- spring 初始化ApplicationContext的几种方式
- 基于Processing的人物八方向移动(加入图片)演示:X,Y,XY同时到达移动
- Solr之中文分词
- 关于动态数组的愚见
- [leetcode] Sqrt(x)
- mac配置环境变量
- datagridview复制粘贴行与单元格内容
- Pascal's Triangle
- Android Studio 三种添加插件的方式
- Install Subversion 1.8.9 ( SVN Client ) on CentOS/RHEL
- LeetCode Triangle
- Android Log 跟踪