试图访问2d数组作为指针

时间:2015-10-11 19:18:55

标签: c++ arrays pointers

我目前正在尝试使用指针表示法作为练习来迭代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;
        }

    }

1 个答案:

答案 0 :(得分:0)

问题是你的ans1是一个简单的指向char的指针,你试图取消引用它两次。正确的循环方式是

    for (char * iter = ans1; iter != ans1 + 6 * 26; iter++){
        cout << *iter << endl;
    }