C++ 自定义数据类型 二维数组

2014-11-24 09:25:35 · 作者: · 浏览: 0

新手关于二维数组的几点理解,大神可以走开。


二维数组简单的初始化


对于二维数组的常用定义(动态)

//已知 行、列

  1. A (*ga)[n] = new A[m][n];
  2. ...
  3. delete []ga; //已知行

    1. A** ga = new A*[m];
    2. for(int i = 0; i < m; i++)
    3. ga[i] = new A[n];
    4. ...
    5. for(int i = 0; i < m; i++)
    6. delete []ga[i];
    7. delete []ga; 这是对系统类型的声明


      但对于自定义数据类型呢 ,应用中是有很多这样的需求,

      假设该类声明如下:

      class CandySprite :public cocos2d::CCSprite{....}


      因为数组中存放的是指针,所以

      //我们可以预定义

      typedefCandySprite *p_candySprite;


      //假设行数为11行

      p_candySprite **candyArray =new p_candySprite*[11];

      //一共10列

      for(int i=0;i<11;i++){

      bubbleArray[i] =new p_candySprite[10];

      }

      这样一个自定义数据类型的二维数组就生成。

      可以写成candyArray[i][j] = 指向candySprite的指针;




      顺便提一下

      void Func(int arr[5])
      {
      ...
      }

      Func 函数的参数是: int arr[5]。 这是第一次接触使用数组作为参数。它表示在调用Func时,需要给这个函数一个大小为5的整型数组。
      在这个参数里,我们没有看到“&”。似乎这应该是一个“传值”方式的参数,但错了,对数组作为参数,则固定是以传址方式将数组本身传给函数,而不是传数组的复制品。
      为什么要有这样一个例外?首先是出于效率方面的考虑。复制数组需要的时间可能和复制一个简单变量没有区别:比如这个复制就只有一个元素: int arr[1]; 但如果这个数组是1000个,或50000个元素,则需要较长的时间,对于C,C++这门追求高效的语言,太不合算。
      接着从第二点上说:“数组本身就是内存地址”,也正好说明了这一点,数组作为函数的参数,传的是“地址”,并且不需要加‘&’符号来标明它是一个传址方式的参数,因为,“数组本身就是内存地址”。