我目前正在尝试使用指针表示法作为练习来迭代2d数组到函数。我在这些论坛上找到了一个如何做到这一点的例子;它是displayTable函数中的if语句。我的编译器给了我关于函数调用本身的错误,声明来自displayTable函数的if语句必须是指针类型。为什么这不起作用?这个例子被投了票。
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
const int numRow = 6;
const int numCol = 26;
char letters[numRow][numCol] = {
{ 'm', 'w', 'r', 'u', 't', 'v', 'n', 'j', 'd', 'j', 'y', 'k', 'k', 'g', 'g', 'd', 'c', 'v', 'n', 'x', 'm', 'd', 'q', 'y', 'u', 't' },
{ 'y', 'e', 'r', 'y', 'e', 't', 'w', 'y', 'u', 'w', 'r', 's', 'f', 'h', 's', 'g', 'a', 'a', 'g', 'd', 'b', 'b', 'b', 'g', 'x', 'z' },
{ 'j', 'd', 'j', 'y', 'k', 'k', 'g', 'g', 'd', 'c', 'v', 'n', 't', 'w', 'y', 'u', 'w', 'r', 's', 'f', 'h', 's', 'g', 'a', 'a', 'g' },
{ 'y', 'e', 't', 'w', 'y', 'u', 'w', 'r', 's', 'f', 'h', 'j', 'y', 'k', 'k', 'g', 'g', 'd', 'c', 'v', 'g', 'a', 'a', 'g', 'd', 'b' },
{ 'e', 'r', 'y', 'e', 't', 't', 'v', 'n', 'j', 'd', 'j', 'y', 'k', 'w', 'r', 's', 'f', 'h', 's', 'g', 'g', 'g', 'd', 'c', 'v', 'g' },
{ 'y', 'u', 'w', 'r', 's', 'f', 'h', 's', 'g', 's', 'f', 'h', 's', 'g', 'a', 'a', 'g', 'd', 'w', 'y', 'u', 'w', 'r', 's', 'f', 'h' }
};
void displayTable(char[][26]);
int main()
{
char *ltrptr = 0;
ltrptr = &letters[0][0];
const int arraySize = 6 * 26;
int answer = 0;
char * arr[6][26];
displayTable(letters);
getchar();
return 0;
}
void displayTable(char ans[][26]){
//pas 2d array, then point to it
cout << " The table as it stands: " << endl;
char * ans1;
ans1 = &ans[0][0];
for (char * iter = &ans1[0][0]; iter != &ans1[0][0] + 6 * 26; iter++){
cout << &ans1[0][0] << endl;
}
}
答案 0 :(得分:0)
问题是你的ans1
是一个简单的指向char的指针,你试图取消引用它两次。正确的循环方式是
for (char * iter = ans1; iter != ans1 + 6 * 26; iter++){
cout << *iter << endl;
}