[英]Using pointers to traverse multidimensional array column by column
我有一个15x15数组,必须使用指针(hw)遍历。 我正在写一个谜题求解器,我需要垂直搜索一些单词,我已经进行了水平搜索,但是我无法逐列遍历数组。我试图在tmp到达末尾时每次将ptr分配给tmp柱。
void VerticalSearch(char** puzzleArray, searchedWord* word) {
int len = word->wordLength;
char **tmp = puzzleArray;
char *ptr = &puzzleArray[0][0];
string s;
for (int i = 0; i < 15; i++) {
**tmp = *ptr;
s = "";
for (int k = 0; k < 15; k++)
{
s += **tmp;
(tmp)++;
}
cout << s << endl;
ptr++;
}
}
要实际执行所需的操作,必须利用在内存中分配数组的方式。
我假设您实际上是在堆栈上分配了数组( char puzzle[15][15]
在您的main中的某个位置)。 在这种情况下,即使将其传递给此函数将向您发出警告(请参阅此答案 ),它也可能会起作用。
该数组以行优先形式分配,这意味着
a1, a2, a3, b1, b2, b3, c1, c2, c3
成为记忆
a1,a2,a3,b1,b2,b3,c1,c2,c3
所以你实际上可以做类似的事情
void VerticalSearch(char** puzzleArray, searchedWord* word) {
int len = word->wordLength;
char** tmp; // initialize the pointer
string s;
for (int i = 0; i < 15; i++) {
tmp = puzzleArray + i; // update with the i-th char of the first row
s = "";
for (int k = 0; k < 15; k++){
s += *tmp;
tmp += 15; //each time you read a character from the column
// go to the next character of the same column
// one row far
}
cout << s << endl;
}
}
这应该工作,我还没有尝试过。
顺便说一句,如果可以,尤其是在数组上,如果可以的话,请避免使用指针算法,否则可能会造成严重的麻烦并导致错误。 使用通常的数组索引,让编译器处理这些工作。
关于矩阵是如何保存在内存的详细信息,请参阅本
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.