将指针转换为2D数组

时间:2011-10-17 21:26:12

标签: c++

我从C#代码调用C ++方法并将2D数组的第一个元素的指针传递给C ++函数,并将数组的维度传递给C ++函数:

C#代码

fixed (bool* addressOfMonochromeBoolMatrixOfBitmap = &monochromeBoolMatrixOfBitmap[0, 0]
{             
    NativeGetUniquenessMatrixOfBitmap(addressOfMonochromeBoolMatrixOfBitmap, Width, Height);         
}

C ++代码

extern "C" __declspec(dllexport) void NativeGetUniquenessMatrixOfBitmap ( bool* addressOfMonochromeBoolMatrixOfBitmap, 
    int boolMatrixWidth, int boolMatrixHeight)
{
}

在C ++代码中,我想将bool *指针强制转换为2D数组,以便使用传统的数组语法访问元素:someArray [1] [4]。 我试过这段代码:

bool (*boolMatrix)[boolMatrixWidth][boolMatrixHeight] = (bool (*)[boolMatrixWidth][boolMatrixHeight])addressOfMonochromeBoolMatrixOfBitmap;

但它没有编译给出消息“预期的常量表达式”。

请分享任何想法。感谢。

1 个答案:

答案 0 :(得分:2)

在C ++ 2D数组中,只有一个数组维可以来自变量,另一个必须是常量。所以你必须保持指针并手动计算每个像素的地址。

我很害怕你必须交换高度和宽度,即正确可能是[高度] [宽度]。如果是这样,那么高度可以变化,但宽度必须是恒定的。如果它不是常量,则必须保留bool*指针并计算每行的地址,如row = address + width*y,然后您可以使用row[x]来访问行中的特定项。

//we prepare row pointer to read at position x,y 
bool *row = addressOfMonochromeBoolMatrixOfBitmap + boolMatrixWidth * y;

//example: read from x,y
bool value_at_xy = row[x];

//example: move to next row
row += boolMatrixWidth;