对于如何将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);
}
答案 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];