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

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


二维数组简单的初始化


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

       //已知 行、列

  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++这门追求高效的语言,太不合算。
接着从第二点上说:“数组本身就是内存地址”,也正好说明了这一点,数组作为函数的参数,传的是“地址”,并且不需要加‘&’符号来标明它是一个传址方式的参数,因为,“数组本身就是内存地址”。


 

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

上一篇:C++与C(二)


下一篇:Imperfect C++ 读书笔记(一):约束