我有一个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方面不是很有经验。
答案 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
}