在C中运行时将1D数组(指针)作为3D矩阵处理

时间:2017-11-13 15:17:17

标签: c arrays multidimensional-array

我收到一些图像数据unsigned char *image = load_image(…);

此数据是一个3D矩阵:x(字符),y(字符)和channel (RGB)(字符)。

如何以image[x][y][channel]方式访问每个元素?

  

e.g。第999行,第10000列,绿色通道:image[999][10000][1]

澄清:

  1. 我想使用C多维数组语法:

      

    array[x][y][z],而不是array[x * height * channels + y * channels + z]

  2. 我可以将1D数组作为2D数组访问:

      

    unsigned char (*imageMatrix)[height] = (unsigned char (*)[height])image   imageMatrix[x][y] = 100

1 个答案:

答案 0 :(得分:2)

如果你可以使用它:unsigned char (*imageMatrix)[height] = (unsigned char (*)[height])image,,那么你的编译器支持可变长度数组。 VLA是在C99中引入的,但在C11中是可选的。

但是,当支持VLA时,您可以将一维数组别名化为三维数组,并将其别名为二维数组:

unsigned char (*imageMatrix)[width][channel] = (unsigned char (*)[width][channel])image;
imageMatrix[x][y][channel] = 100;