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个元素的数组,这样就构建了一个10行5列的数组。
当数组使用完毕,释放空间的代码是:
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即二维长度。