如何使用指针访问这个二维数组的元素?
Posted
技术标签:
【中文标题】如何使用指针访问这个二维数组的元素?【英文标题】:How can I use pointers to access the elements of this two-dimensional array? 【发布时间】:2021-06-14 02:03:40 【问题描述】:我有一个二维数组如下: 字符板[3][3] = '1', '2', '3', '4', '5', '6', '7', '8', '9' ;
我访问它的元素如下:
cout << board[0][0] << board[0][1] << board[0][2] << "\n";
cout << board[1][0] << board[1][1] << board[1][2] << "\n";
cout << board[2][0] << board[2][1] << board[2][2] << "\n";
现在我想创建一个指向这个数组的指针并访问它的元素。所以这就是我想出的:char (*ptr)[3] = board
这不起作用。
如何使用指针访问元素?
【问题讨论】:
“不起作用”是什么意思?我觉得很好:godbolt.org/z/oco4fExjj 正如您所描述的,ptr[i][j]
将访问board[i][j]
(假设i
和j
是有效的索引,即介于0
和2
之间)。如果您期望有所不同,则需要指定您的期望。
所以,我需要在不使用括号的情况下访问元素。例如,我仍然使用数组括号来获取元素,例如 (ptr)[0][0] for 1 和 (ptr)[0][1] for 2...
@ArmeenParsa [ ]
运算符也用于从指针索引。目前尚不清楚“不使用括号”是什么意思。您可以使用转换a[b]
*((a) + (b))
ptr
周围不需要大括号。由于优先顺序 (ptr)[i][j]
和 ptr[i][j]
是等价的。
【参考方案1】:
我会尽量给出一个笼统的答案:
想象一下,如果你有一个多维整数数组:
int arr[3][3] = 2,1,2, 3,4,6, 2,1,9;
这里。有 3 行和 3 列 [3][3]。 您可能想至少在此方法中了解它们(数组、行和列的大小)。还有另一种方法可以使用,但我敢肯定,它会超出范围。
所以,
使用指针访问每个元素的方式是:
for(int *iter = &arr[0][0]; iter != &arr[0][0] + 3 * 3; iter++)
std::cout << * (iter) << " " ;
*iter = &arr[0][0]
在这里我们将其分配给第一个元素,并且条件设置为iter != &arr[0][0] + 3 * 3
,因为我知道大小是 3 行 3 列,所以我这样做了,你可以这样做 + rows * columns;
那会工作。
Optiplex@jetta:~/Desktop/PROGRAM/CPP$ ./b.out
2 1 2 3 4 6 2 1 9
这是给你的输出。
同样,也会为角色做,
字符代码:
#include <iostream>
#include <string>
int main()
char BOARD[3][3] = '1', '2', '3', '4', '5', '6', '7', '8', '9';
for(char * iter = &BOARD[0][0]; iter != &BOARD[0][0] + 3 * 3; iter++)
std::cout << * (iter) << " " ;
输出:
Optiplex@jetta:~/Desktop/PROGRAM/CP$ ./b.out
1 2 3 4 5 6 7 8 9
我们使用了 iter 作为指针。并且 iter 是 iterator 的缩写(因为您正在使用它来遍历您的数组,所以可以方便地命名您的变量)。 希望对你有帮助,如果还有什么问题请告诉我。
【讨论】:
非常感谢!我很好奇我是否可以完全不使用 for 循环来获取元素。我可以吗? @ArmeenParsa 显然你可以做到,循环只是一个重复完成的自动化任务,你可以通过增加 iter 来手动完成,你看到 iter++ 了吗?在循环?。就是这样。这为你做的工作。如果您手动完成,则必须执行 iter = iter + 1;它会跳转到数组中的下一个元素,因为数组是按顺序存储的,它会跳转到下一个右边的元素。仍有疑问,欢迎提问 所以像 board[1] 会是 *(ptr + 1)。那么板[1][1]呢?对不起,这对我来说有点难...... 是的,如果 *iter = &BOARD[0][0]; *(iter + 1) = 2 *(iter + 4) = 5 *(iter + 2) = 3 (实际上可以使用的方法太多了,甚至还有双指针方法,但是您必须研究一下,我不建议直接跳到它,如果你仍然想要它,它很容易找到只是谷歌多维指针算法。以上是关于如何使用指针访问这个二维数组的元素?的主要内容,如果未能解决你的问题,请参考以下文章