我是靠谱客的博主 平常戒指,最近开发中收集的这篇文章主要介绍如何动态创建数组,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我们知道在C或C++里,有时候我们要定义的数组的长度是不定的,所以要动态地创建数组,也就是在运行的时候动态分配内存。
我们常用的是对一维或二维数组动态的创建,但毕竟有时候我们要对更多维的数组进行动态地创建的(尽管少用)。
对于一维数组p[n]的动态创建:
    char *p=new char[n];
对于二维数组p[n][m]的动态创建:
    char **p=new char*[n];
    for(int i=0;i<n;i++)
        p[i]=new char[m];
其实一维二维的创建都比较简单,但如果是4维或5维呢?这往往使初学者不知所云。其实只要我们从中找出规律后,就一通百通了。
往往,我们对同一件事物,以不同的看法看它,就有不同的收获或不同的见解。而对于抽象的事物,我们要建立自己的模型,模型建立得好坏,对问题是否能够得到解决有很大的影响。
结构体我们都懂,其实我们也可以把数组“看成"是结构体,比如数组a[8],可以看成是一个有八个相同类型成员的结构体;如数组a[n][m]可以看成是一个有n个类型为一维数组的成员的结构体,而每个成员可以看成是

一个有m个相同类型成员的结构体,…………。这样,对于一个N维的数组,可以把它看成一个有N层的树,我们实际的数据存在树的叶结点里,而树的每一层是我们动态创建的,比如数组a[i1][i2][i3]……[N-2][N-1][N],第

一层个数为i1,第二层个数为i1*i2,第N层个数为i1*i2*……*N。所以,维数越多,时间和空间上都增长得非常快,而且我们一般也很少用到多维的动态数组,但是,尽管这样,这种模型是有利于我们对多维数组以及它的动态创建的理解的,。下面就说说如何以这样的模型或思维方式动态创建四维的数组p[n][m][p][t]:

     char****p=new char***[n];//首先创建一个根结点,类型为char****,它指向一个有n个元素且类型为char***的数组(或每个成员都为char***类型的结构体)
     for(int i=0;i<n;i++)//创建第二层树结点,每个结点的类型为char***,它指向一个有m个元素且类型为char**的数组(或每个成员都为char**类型的结构体)
    {
          p[i]=new char**[m];
         for(int j=0;j<m;j++)//创建第三层树结点,每个结点的类型为char**,它指向一个有q个元素且类型为char*的数组(或每个成员都为char*类型的结构体)
         {
        p[i][j]=new char*[q];
for(int k=0;k<q;k++)//创建第四层树结点,每个结点的类型为char*,它指向一个有t个元素且类型为char的数组(或每个成员都为char类型的结构体)
{
       p[i][j][k]=new char[t];
                }
         }
    }
到此,这个四维的数组就创建完成了,我们可以给n,m,p,t赋一定的值,就创建一个大小为n*m*p*t的数组了,然后我们就可以如这样:*p[i][j][k]=value;存入我们的值了

回收内存时也简单,和分配的时候刚好相反,如下:

int t1=n,t2=m,t3=q;
for(i=0;i<n&&t1;i++)
{
   for(int j=0;j<m&&t2;j++)
   {
    for(int k=0;k<q&&t3;k++)
     delete p[i][j][k],t2--;
    delete p[i][j],t3--;
   }
   delete p[i],t1--;
}
delete [] p;

}

最后

以上就是平常戒指为你收集整理的如何动态创建数组的全部内容,希望文章能够帮你解决如何动态创建数组所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部