爱生活 爱技术

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  32 随笔 :: 0 文章 :: 0 评论 :: 0 Trackbacks
 

C语言中: 

int x,y;
 x=3;
 y=4;

 int **pt;  
     
 pt=(int**)malloc(sizeof(int*)*x);  
 
 for(int i=0;i<x;i++)
  
  pt[i]=(int*)malloc(sizeof(int)*y);  
  
   
 pt[2][3]=1;
 

char arr**;

char *GoodsName[1000]; //指针数组,每个指针指向一行
for(i=0;i<1000,i++)
GoodsName[i]=(char *)malloc(100 * sizeof(char));

arr = GoodsName;

 

==================================================================================

 

C++中用new动态创建二维数组的格式一般是这样:

TYPE (*p)[N] = new TYPE [][N];

其中,TYPE是某种类型,N是二维数组的列数。采用这种格式,列数必须指出,而行数无需指定。在这里,p的类型是TYPE*[N],即是指向一个有N列元素数组的指针。

还有一种方法,可以不指定数组的列数:

int **p;
p = new int*[10];    //
注意,int*[10]表示一个有10个元素的指针数组
for (int i = 0; i < 10; ++i)
{
    p[i] = new int[5];
}

这里是将p作为一个指向指针的指针,它指向一个包含10个元素的指针数组,并且每个元素指向一个有5个元素的数组,这样就构建了一个105列的数组。

当数组使用完毕,释放空间的代码是:

for(int i = 0; i < 10; i++)
{
    delete[] p[i];
}
delete[] p;

 

还有一种方法:(数组的第二维必须为常量)

 int  len 20;  
          int
*p)[1024] = new int[len][1024];  

 

处理二维数组,可以用降维或是二维法。
降维法是用一位数组来接受二维数组,将二维元素的首地址&a[0][0]作为参数,传递给函数,函数用int *接受。
二维法就直接用二维数组来接受,但是需要指定列数。

============================================================================

方法一、

例如:

int a[5][10];

函数这样定义:

void func(int (*p)[10])
{
.............. //
处理语句,就可以这样使用:p[i][j]
}

这样调用:func(a);

方法二、

二维数组相当一个指向指针的指针
所有, 只要这样就可以了
void fun(int **p)
{

}

方法三、

可以对二维数组进行降维处理,看作一维数组,传递数组首地址,并且将数组二维长度传递过去,在函数中要访问a[i][j],即可以通过*(p+i*col+j),其中的col即二维长度。

posted on 2009-09-16 01:39 海 阔 天 空 阅读(598) 评论(0)  编辑 收藏 引用 所属分类: C++