C ++将2D数组对象插入另一个2D数组对象

时间:2008-12-27 07:00:39

标签: c++ multidimensional-array

在使用Dev C ++时,我试图将较小的2D数组对象插入到较大的2D数组对象中。在尝试实现这一目标时,我遇到了编译器错误,我不知道如何解决。

我尝试通过返回数组的名称来插入较小的Object。然后我尝试使用较小数组的值更改大数组内的值。

我遇到两行代码:

int result = smallerArray.extractPiece();
largerArray.extractArray(result);

在这两行代码中:

int Piece::extractPiece()
{
    return **pieceArray;
}

void Grid::extractArray( int** arr )
{
    for(int i = 0; i < xGrid ; ++i)
    {
         for (int j = 0; j < yGrid ; ++j)
         {
             squares[i][j] = arr[i][j];
                 }
    }
}

两个问题是“int result”不会持有smallerArray.extractPiece(), 如果我只是在largeArray.extractArray()中放入“smallerArray.extractPiece()”,我仍然会遇到问题。我试图将“int result”作为指针指针,作为“int ** result”,我仍然有相同的错误。

这些是我在Dev C ++中编译时遇到的错误:

In function `int main()';
invalid conversion from `int' to `int**'
initlizing argument 1 of 'void Grid::extractArray(int**)'
[Build Error] [grid test.o] Error 1

有谁知道什么是错的?

2 个答案:

答案 0 :(得分:1)

正是这一堆代码:

int result = smallerArray.extractPiece();
largerArray.extractArray(result);
// ...
int Piece::extractPiece() {
    return **pieceArray;
}

尝试将一个int传递给extractArray,它想要一个指向指针的指针,可以推测你的动态数组,而不是int。尝试将其更改为

int **result = smallerArray.extractPiece();
largerArray.extractArray(result);
// ...
int ** Piece::extractPiece() {
    return pieceArray;
}

仅将结果更改为指针指针将不起作用。您当然还必须更改extractPiece返回的内容(从int更改为int **)

答案 1 :(得分:1)

看,总是至少对我而言,内部管理二维数组比一维数组更容易,其中M [i,j] = A [i * N + j]其中N是cols(或行数,如果是2D数组是行列类型)。用户可以获得带有i,j索引的元素,但我的类总是将A [M * N]存储为私有数据。传递1-D指针数组比管理2-D指针数组更容易(你不能陷入指针指针语法,这在某些代码中会变得混乱)。,

这与此问题无关,但由于我不知道特定的编译器优化内在函数,我想知道M [i,j]是否在内部转换为A [i]以在生成的代码中使用更简单的寻址模式。