这个问题建立在之前提出的问题之上: Pass by reference multidimensional array with known size
我一直在努力弄清楚如何让我的函数很好地处理二维数组引用。我的代码的简化版本是:
unsigned int ** initialize_BMP_array(int height, int width)
{
unsigned int ** bmparray;
bmparray = (unsigned int **)malloc(height * sizeof(unsigned int *));
for (int i = 0; i < height; i++)
{
bmparray[i] = (unsigned int *)malloc(width * sizeof(unsigned int));
}
for(int i = 0; i < height; i++)
for(int j = 0; j < width; j++)
{
bmparray[i][j] = 0;
}
return bmparray;
}
我不知道如何重写这个函数,以便它在我通过引用将 bmparray 作为一个空的 unsigned int ** 传入的地方工作,这样我就可以在一个函数中为数组分配空间,并且在另一个中设置值。
最佳答案
用一个类来包装它,然后通过引用传递对象
class BMP_array
{
public:
BMP_array(int height, int width)
: buffer(NULL)
{
buffer = (unsigned int **)malloc(height * sizeof(unsigned int *));
for (int i = 0; i < height; i++)
{
buffer[i] = (unsigned int *)malloc(width * sizeof(unsigned int));
}
}
~BMP_array()
{
// TODO: free() each buffer
}
unsigned int ** data()
{
return buffer;
}
private:
// TODO: Hide or implement copy constructor and operator=
unsigned int ** buffer
};
关于C++通过引用传递动态分配的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/529875/