参考链接
https://www.cnblogs.com/cygalaxy/p/6963789.html
https://www.cnblogs.com/LeeZz/p/5084498.html
问题
在C++语言中实际上没有真正的多维数组,所谓的多维数组实际上是数组的数组。
和所有数组一样,当将多维数组传递给函数时,真正传递给函数的是指向数组首元素的指针。因为我们处理的是数组的数组,所以首元素本身就是一个数组,指针就是一个指向数组的指针。将二维数组作为参数进行传递时,必须指明所有维数大小或者省略第一维的,但是不能省略第二维或者更高维的大小。
以下几种是正常的传递方式:
void fun1(int arr[10][10]);
void fun2(int arr[][10]);
但是下面这种传递方式是错误的:
void fun3(int [][]); //必须指明第二维的大小
当我们需要使用第三种传递方式时,应该怎么做呢?
解决方案
给出示例:
#include <iostream>
#include <stdlib.h>
using namespace std;
void fun(int *A, int M, int N)
{
for (int i=0; i<M; i++)
{
for (int j = 0; j<N; j++)
{
*(A+i*N+j) = i*N+j+2; //根据编译器寻址方式对数组元素操作
}
}
}
int main()
{
int M = 2; //行数
int N = 2; //列数
int A[M][N] = {0};
for (int i=0; i<M; i++)
{
for (int j = 0; j<N; j++)
{
A[i][j] = i*N+j+1;
}
}
cout << "before : " << endl;
for (int i=0; i<M; i++)
{
for (int j=0; j<N; j++)
{
printf("%d ", A[i][j]);
}
cout << endl;
}
cout << endl;
fun((int *)A, M, N);
cout << "after : " << endl;
for (int i=0; i<M; i++)
{
for (int j=0; j<N; j++)
{
printf("%d ", A[i][j]);
}
cout << endl;
}
cout << endl;
}
最后的结果为: