关于动态数组的愚见

来源:互联网 发布: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<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
原创粉丝点击