【发布时间】:2020-03-26 01:43:36
【问题描述】:
我正在尝试理解这段代码:
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;
}
}
}
一维数组表示法非常混乱。我正在尝试将其转换为二维符号(我发现它更易于阅读)。有人能指出我如何做到这一点的正确方向吗?
【问题讨论】:
-
如果您提供一个 small 数组示例,您希望将其从一种表示形式转换为另一种表示形式,这将很有帮助。
-
很明显一维数组是以列为主格式存储的,总是乘以
height的值是列号,加上它的是行号。您不清楚其中哪一部分? -
好的,所以循环中的第二行基本上是这样的:
tmp_image[j][i] += image[j][i-1]*0.5/5.0? -
您使用的是 C 编译器还是 C++ 编译器?
-
@chux-ReinstateMonica 是的,这很奇怪。请注意,未使用参数
width以及height与ny的关系。通常你只需要一个。通常在ny和nx这样的东西中确定一维数组的长度。很奇怪的结构。长度至少需要为ny+(nx+1)*height+1