- 动态数组的构建
在创建动态数组的过程中我们要遵循一个原则,那就是在创建的时候从外层往里层,逐层创建;而释放的时候从里层往外层,逐层释放。
一维动态数组的构建:
///一维动态数组的构建:
#include<bits/stdc++.h>
///#include<stdio.h>
///#include<malloc.h>
int main()
{
int *p=(int *)malloc(1000000*sizeof(int));
//int p[1000000];
int i=0;
for(;i<1000000;i++)
printf("%d\n",p[i]=i);
free(p); ///最后必须释放内存
return 0;
}
或
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i;
int *array;
puts("输入一维长度:");
scanf("%d",&n);
array=(int*)malloc(n*sizeof(int));///第一维
if(array==NULL){ ///因为堆空间是有限的,所以动态分配内存后,
printf("No enough memory !\n");///必须检查函数malloc()的返回值,确保使用前不是NULL,
exit(0); ///即非空指针,任何空指针均意味着它不指向任何对象,
///不应该使用它。如果使用空指针则可能会导致程序瘫痪。
}
for(i=0;i<n;i++)
{
array[i]=i+1;
printf("%d\t",array[i]);
}
free(array);///释放第一维指针
return 0;
}
二维动态数组的构建:
///二维动态数组的构建:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int n1,n2;
int **array,i,j;
puts("输入一维长度:");
scanf("%d",&n1);
puts("输入二维长度:");
scanf("%d",&n2);
array=(int**)malloc(n1*sizeof(int*)); //第一维
for(i=0;i<n1; i++)
{
array[i]=(int*)malloc(n2* sizeof(int));//第二维
for(j=0;j<n2;j++)
{
array[i][j]=i+j+1;
printf("%d\t",array[i][j]);
}
puts("");///puts("")作用相同与printf("\n")和putchar('\n')
}
for(i=0;i<n1;i++)
{
free(array[i]);//释放第二维指针
}
free(array);//释放第一维指针
return 0;
}
三维动态数组的构建:
///三维动态数组的构建:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int n1,n2,n3;
int ***array;
int i,j,k;
puts("输入一维长度:");
scanf("%d",&n1);
puts("输入二维长度:");
scanf("%d",&n2);
puts("输入三维长度:");
scanf("%d",&n3);
array=(int***)malloc(n1*sizeof(int**));//第一维
for(i=0; i<n1; i++)
{
array[i]=(int**)malloc(n2*sizeof(int*)); //第二维
for(j=0;j<n2;j++)
{
array[i][j]=(int*)malloc(n3*sizeof(int)); //第三维
for(k=0;k<n3;k++)
{
array[i][j][k]=i+j+k+1;
printf("%d\t",array[i][j][k]);
}
puts("");
}
puts("");
}
for(i=0;i<n1;i++)
{
for(j=0;j<n2;j++)
{
free(array[i][j]);//释放第三维指针
}
}
for(i=0;i<n1;i++)
{
free(array[i]);//释放第二维指针
}
free(array);//释放第一维指针
return 0;
}
- malloc,calloc,realloc三者区别:
#include<bits\stdc++.h>
using namespace std;
int main()
{
int *a,n,i,*b;
while(~scanf("%d",&n)){
///a=(int *)malloc(100*sizeof(int));
a=(int *)calloc(100,sizeof(int));///calloc有初始化所申请的空间的值,malloc没有
a=(int *)realloc(a,10000*sizeof(int));///relloc返回的指针很可能指向一个新地址。
///所以在代码中,我们必须将relloc的返回值,重新赋值给a
for(i=0;i<n;i++){
a[i]=i+2;
}
for(i=0;i<n;i++){
printf("%d\t",a[i]);
}
puts("");
free(a);
}
return 0;
}