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 != 5; i++)
{
delete[] p[i];
}
delete[] p;
处理二维数组,可以用降维或是二维法。
降维法是用一位数组来接受二维数组,将二维元素的首地址&a[0][0]作为参数,传递给函数,函数用int *接受。
二维法就直接用二维数组来接受,但是需要指定列数。
追问谢谢,能不能一个二维数组中,第一列的数和第二列相加,得到的结果赋给一个一维数组?
追答那肯定能啊,不管是什么样的数组,每一个元素都是一个单独的数据
追问p[i] = new int[5];
这里这个5 能不能换成变量,因为我要先取得listcontrol的行数,然后再根据这个行数确定这个二维数组有多少列?
追答不能,应为new int[5]定义在堆上,编译的时候他又应该有值,而你的listcontrol的行数是在栈上,运行时才有值,会报错的
本回答被提问者采纳