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

Attempting to access 2d array as a pointer

本文关键字:指针 访问 数组 2d      更新时间:2023-10-16

我目前正在尝试通过一个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;
        }
    }

问题是您的ans1是一个简单的指向char的指针,并且您试图对其解引用两次。执行循环的正确方法是

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