这里呢我们主要是针对二维数组的动态申请,而进行的讲解,我们可以做到随时申请,随时释放。
下面我将代码分为三部分:
1.空间(数组)申请函数
2.空间(数组)释放函数
3.数组输出函数.
/*
制作题目:动态开辟数组
制作时间:2018-7-20
制作人 :TheShyclear
内容信息:
1.采用C中的malloc / free 实现一维二维数组的动态开辟
2.采用C++中的new和delete
主要问题:
1.注意new和delete的用法
2.在动态申请二维数组的时间,二级指针指向的是一个数组,存放的是一级指针
*/
#include<string.h>
#include<iostream>
using namespace std;
typedef int Elemtype;
//C下的malloc free的数组的动态申请
Elemtype* DynaticCreate1Array(Elemtype *p,int le)
//一维数组指针,数组的长度
{
int i=0;
p = (Elemtype*)malloc(sizeof(Elemtype)*le);
printf("please input data:\n");
for(i;i<le;++i)
{
cin>>p[i];
}
return p;
}
void Free1Array(Elemtype *p)
{
free(p);
}
Elemtype** DynamicCreate2Array(int m,int n,Elemtype **p)
{
int i = 0,j = 0;
p = (Elemtype**)malloc(sizeof(Elemtype*)*m);
for(i = 0;i<m;++i)
{
p[i] = (Elemtype*)malloc(sizeof(Elemtype)*n);
}
printf("please input the datas:\n");
for(i = 0;i<m;++i)
{
for(j=0;j<n;++j)
{
cin>>p[i][j];
}
printf("\n");
}
return p;
}
void Free2Array(Elemtype **p,int m)
{
for(int i=0;i<m;++i)
{
free(p[i]);
}
free(p);
}
//C++下的new和delete数组的动态申请
Elemtype* DynaticNew1Array(Elemtype *p,int len)
{
p = new int[len];//初始化,申请一维数组,存放类型Elemtype,大小为len
cout<<"please input data:\n"<<endl;
for(int i=0;i<len;++i)
{
cin>>p[i];
}
return p;
}
void Delete1Array(Elemtype *p)
{
delete []p;//p指向的空间是一个数组
}
Elemtype** DynamicNew2Array(int m,int n,Elemtype **p)
{
p = new Elemtype*[m];//对于p来说是一个二级指针,存放的是一级指针类型是Elemtype*,大小是m
for(int i=0;i<m;++i)
{
p[i] = new Elemtype[n];//p底下的一级指针指向的是一维数组,存放的类型是Elemtype,大小是n个
}
cout<<"please input data:\n"<<endl;
for(int i=0;i<m;++i)
{
for(int j=0;j<n;++j)
{
cin>>p[i][j];
}
cout<<endl;
}
return p;
}
void Delete2Array(int m,Elemtype **p)
{
for(int i=0;i<m;++i)
{
delete []p[i];//指向的是数组
}
delete []p;
}
void Show_2Array(int m,int n,Elemtype **p)
{
for(int i=0;i<m;++i)
{
for(int j=0;j<n;++j)
{
cout<<p[i][j]<<" ";
}
printf("\n");
}
}
void Show_1Array(Elemtype *p,int le)
{
for(int i=0;i<le;++i)
{
cout<<p[i]<<endl;
}
}
void main()
{
int m,n;
cout<<"please input the m n"<<endl;
cin>>m;
cin>>n;
Elemtype **s = NULL;
s = DynamicNew2Array(m,n,s);
Show_2Array(m,n,s);
Delete2Array(m,s);
}
运行结果: