将2d数组指针参数分配给本地数组指针变量

时间:2020-05-06 18:09:50

标签: c++ arrays pointers parameter-passing

对于如何将2d数组指针参数分配给本地2d数组指针变量,我有些困惑。检查下面的代码。

#define N   5
#define M   6

void print(int (*arr)[M][N]) {

    int *localArr[M][N];

    localArr = arr;  //error C3863: array type 'int *[6][5]' is not assignable
    //localArr[0][0] =1; and so on.
}

int main()
{

    int Array1[M][N];
    print(&Array1);         
}

3 个答案:

答案 0 :(得分:1)

本地声明必须采用这种方式,

 int (*localArr)[M][N]; //pointer to an MxN array
 //int * localArr[m][N];//An MxN array of pointer to int

答案 1 :(得分:0)

您想实现什么?如果您只想打印二维数组,那为什么不使用这种方法呢?

void print(int localArr[M][N]) {

    for (int i = 0; i < M; i++) {
        for (int j = 0; j < N; j++) {
            cout << localArr[i][j];
        }
    }
}

如果有一些限制,那么Nitheesh是正确的!

答案 2 :(得分:0)

如果我们更改尺寸以使其更容易安装:

#define M 2
#define N 3

然后在某种程度上图形化地显示变量arr是这样的:

+-----+      +--------+--------+--------+--------+--------+--------+
| arr | ---> | [0][0] | [0][1] | [0][2] | [1][0] | [1][1] | [1][2] |
+-----+      +--------+--------+--------+--------+--------+--------+

arr是一个指针。它指向一个数组数组,其中每个元素都是一个int

这意味着您可以取消引用arr以获取其指向的内容,然后对其使用数组索引来获取int的值:

int value = (*arr)[0][1];

现在,如果我们改用localArr,则更像是

+----------------+----------------+----------------+----------------+----------------+----------------+
| localArr[0][0] | localArr[0][1] | localArr[0][2] | localArr[1][0] | localArr[1][1] | localArr[1][2] |
+----------------+----------------+----------------+----------------+----------------+----------------+

localArr是一个数组数组,其中每个元素都是int *

因此,您需要一个int *才能获得单个元素:

int *pointer = localArr[0][1];