C++ 为什么使用int数组[][20]?

C++ 为什么使用int数组[][20]?,c++,arrays,function,C++,Arrays,Function,在ReadVector()中,为什么我必须编写inta[][20]?[20]的目的是什么。为什么我不能写一个[][] int a[20][20 ], n,m; int ReadVector(int a[][20],int n,int m){ for (int i=0; i<n; i++) for (int j=0; j<m; j++){ cout<<"a["<<i<<","<<j<<

ReadVector()
中,为什么我必须编写
inta[][20]
[20]
的目的是什么。为什么我不能写一个[][]

int a[20][20 ], n,m;

int ReadVector(int a[][20],int n,int m){
for (int i=0; i<n; i++)
        for (int j=0; j<m; j++){
            cout<<"a["<<i<<","<<j<<"]=";
            cin>>a[i][j];
            }

 return *a[20];`
inta[20][20],n,m;
int ReadVector(int a[][20],int n,int m){
对于(int i=0;i
为什么我不能写一个[][]

int a[20][20 ], n,m;

int ReadVector(int a[][20],int n,int m){
for (int i=0; i<n; i++)
        for (int j=0; j<m; j++){
            cout<<"a["<<i<<","<<j<<"]=";
            cin>>a[i][j];
            }

 return *a[20];`
因为
int a[][]
int**a
(指向
char
的指针)相同,而
int a[][20]
int(*a)[20]
(指向
char[20]
的指针)不同


当您通过
a[i]
访问行时,对
int**a
应用相同的指针算法会产生与
int(*a)[20]
不同的结果,必须知道第二维度,才能获得正确的内存地址,因为

&(a[i]) = &(a[0]) + i*m*sizeof(int)
因此,当您访问图元时,将通过以下方式计算偏移:

&(a[i][j]) = &(a[0]) + i*m*sizeof(int) + j

只考虑在矩阵中如何找到元素[C>>[i] [j] < /C> >元素,如果只允许从第一个元素开始计数元素……为了使这项工作至少需要知道一行中有多少个元素。