使用指针将线性数组转换为结构的二维数组

时间:2015-05-07 15:19:14

标签: c++ c arrays pointers struct

编辑:我会改进这个问题。我会在一天之内澄清一下。

首先,我正在写一个litlle bmp图像分析仪。我有以下问题:图像存储在普通字节上,没有格式作为数组。

图像为24位,每像素需要3个字节。我已尝试使用我在此stackoverflow页面上找到的解决方案,但我无法将其用于结构。

我试过但它引用了无效区域和字节。如果你想在TinyPaste中看到它,那么这是我的完整代码(仅用于更好的突出显示):The code in TinyPaste

编辑1:此代码使用C ++,我想将其转换为纯C,以实现可移植性。这只是我将线性阵列转换为二维的想法。我试图让它适应结构的纯C,但我失败了。

此代码段取自a stackoverflow question that made me think about this

//The resulting array
unsigned int** array2d;

// Linear memory allocation
unsigned int* temp = new unsigned int[sizeX * sizeY];

// These are the important steps:
// Allocate the pointers inside the array,
// which will be used to index the linear memory
array2d = new unsigned int*[sizeY];

// Let the pointers inside the array point to the correct memory addresses
for (int i = 0; i < sizeY; ++i)
{
    array2d[i] = (temp + i * sizeX);
}



// Fill the array with ascending numbers
for (int y = 0; y < sizeY; ++y)
{
    for (int x = 0; x < sizeX; ++x)
    {
        array2d[y][x] = x + y * sizeX;
    }
}

我将它改编为引用结构,但它失败了。我试过在这一行乘以三:

 array2d[i] = (temp + i * sizeX /* multiply by 3*/); 

但它仍然没有工作。我还完成了从char到struct bmp_pixel(char r,char g,char b)的相关铸件。

有人能告诉我如何使它适应结构的纯C吗?感谢。

0 个答案:

没有答案