如何访问数组的移动部分

时间:2014-07-16 14:30:28

标签: c arrays pointers

我对我的程序中的操作感到茫然(用C语言编写)。我正在处理一个大的数字矩阵(图像)。处理一次发生一行,参考前一行,所以我一次只需要访问两行数字。

最初,我尝试了一个2 x X阵列,但是一旦我保存了第三行的信息,阵列就颠倒了,阵列的第一行中的第三行和图像的第二行图像的第二行。

除了简单地将数组的第二行复制到第一行之外,还有更好的方法来解决这个问题吗?也许它不会那么糟糕,但我想这样做,因为图像的每一行都会很昂贵。我应该在图像上使用两个指针吗?

我很抱歉,如果这是一个很容易被抬起的常见事情,但我无法弄清楚如何开始寻找。如果有人需要澄清,请告诉我。非常感谢你!

我需要访问的数字的图表: http://www.gliffy.com/go/publish/5968966

2 个答案:

答案 0 :(得分:1)

我想你正在阅读它时处理图像,或者你正在解压缩它,或者一些这样的图像,因为如果你已经将整个内容以可用的形式存储在内存中,那么你就可以使用它了。

我看到两个相当不错的选择:

  1. 使用变量来跟踪哪一行包含哪一行,而不是硬编码2 x数组中较早和较晚行的索引。
  2. 为每一行使用一维数组,并使用指针跟踪哪一行包含当前行,哪一行包含前一行。
  3. (虽然真的,那些归结为几乎相同的东西。)无论哪种方式,你都可以避免不必要的复制。

答案 1 :(得分:0)

我们假设你有:

struct rbg_t bitmap[X][Y];

要获得尺寸为X的窗口2,它是这样的:

struct rgb_t *first_line = bitmap[0], *second_line=bitmap[1];

然后你可以像这样处理这两行:

for(int i=0;i<X;++i)
{
    do_work(first_line[i], second_line[i]);
}

要将窗口向下移动一个,您可以执行以下操作:

first_line+=sizeof(struct rgb_t)*X;
second_line+=sizeof(struct rgb_t)*X;

其中X是位图的宽度