用于抓取单个行和单个列的二维指针算法

时间:2017-10-03 07:44:17

标签: c arrays pointers multidimensional-array

我有一个2D阵列的误解,我只是不理解。我在论坛上检查了一切以找到解决此问题的方法,但无济于事。

情况,我有一个2D数组,并使用我的findTile()函数,我希望能够使用指针算法从中获取单个行。相应地,我也想要整列?

方法标题按原样并且无法更改。如果我找到一个瓦片X(其中x是一个数字而一个瓦片只是一个数组单元),那么我希望能够沿着方向(向上,向下,向左,向右)操纵它。数组中的所有周围值都将相应地移动并进行换行。所以在一个数组中

[1][2][3]
[4][5][6]
[7][8][9]

" up 9"意味着

[1][2][6]
[4][5][9]
[7][8][3]

"离开3"意味着

[1][2][6]
[4][5][9]
[8][3][7]

因此,只要我能找到如何将这些行作为列进行操作,那就太棒了,但那就是问题所在。我必须在我的findTile()函数中使用我的moveDirection()函数,而我不知道我可以将哪些参数分配给'?'。

static bool findTile(int tile, int rows, int cols, int grid[][cols], int *r, int *c)
{
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            if (grid[i][j] == tile)
            {
                r = grid[i];
                c = grid[j];
                return true;
            }
        }
    }
    return false;
}

bool moveLeft(int tile, int rows, int cols, int grid[][cols])
{
    findTile(tile, rows, cols, grid, ?, ?);
}

如果你可以告诉我有什么指针技术来解决这个问题,也许这会让我对如何处理这样的问题有所了解。我在C方面不是很有经验。

1 个答案:

答案 0 :(得分:1)

有两个问题,在函数中使用指针参数以及如何将这样的参数传递给函数。

首先,函数参数int *r是一个指向整数的指针;取消引用它读取/写入它指向的积分值。相反,在r = grid[i]中使用它“plain”会让指针指向不同的位置(在这种情况下指向第i行的第一个元素的地址),这可能不是你想要的。我想你的意思是*r = i,它将i的值写入r指向的地方。

其次,在调用函数时,提供一个指向函数可以写入结果的整数对象的指针。

因此,它将类似于以下内容:

static bool findTile(int tile, int rows, int cols, int grid[][cols], int *r, int *c) {
   ...
   *r = 10;
   ...
   return true;
}

int main() {

   int r=0, c=0;
   findTile(... , &r, &c); // Note: & passes the address of integral objects r and c
   // after that, r has the value 10
}