将一维数组转换为二维数组

时间:2019-12-01 02:35:25

标签: c++ c arrays

我正在尝试理解以下代码:

void stencil(const int nx, const int ny, const int width, const int height,
             double* image, double* tmp_image)
{
  for (int j = 1; j < ny + 1; ++j) {
    for (int i = 1; i < nx + 1; ++i) {
      tmp_image[j + i * height] =  image[j     + i       * height] * 3.0 / 5.0;
      tmp_image[j + i * height] += image[j     + (i - 1) * height] * 0.5 / 5.0;
      tmp_image[j + i * height] += image[j     + (i + 1) * height] * 0.5 / 5.0;
      tmp_image[j + i * height] += image[j - 1 + i       * height] * 0.5 / 5.0;
      tmp_image[j + i * height] += image[j + 1 + i       * height] * 0.5 / 5.0;
    }
  }
}

一维数组符号非常令人困惑。我正在尝试将其转换为2D表示法(我觉得更容易阅读)。有人能为我指出正确的方向吗?

1 个答案:

答案 0 :(得分:0)

这些代码所做的全部工作就是从原始图像中创建新图像,方法是从相应像素中获取60%,从每个相邻像素中获取10%。

看到tmp_image[j + i * height]时,将其读为tmp_image[i][j]

更改代码以按实际使用2D语法可能需要在编译时至少了解一个维度,而现在它是一个运行时参数。因此,除非您正在使用C ++并想编写或使用矩阵类而不是普通数组,否则这可能是一个入门。