为什么int array [] [20]?

时间:2016-09-25 10:44:07

标签: c++ arrays function

ReadVector()我为什么要写int a[][20][20]的目的是什么?为什么我不能写a[][]

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];`

2 个答案:

答案 0 :(得分:2)

当您通过a[i]访问行时,必须知道第二个维度,以获取正确的内存地址,因为

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

因此,当您访问元素时,偏移量通过以下方式计算:

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

如果你只被允许从第一个元素开始计算元素,你可以考虑如何在矩阵中的[i][j]位置找到一个元素...为了完成这项工作你必须知道至少有多少元素元素在一排。

答案 1 :(得分:-1)

  

为什么我不能写a[][]

因为int a[][]int **a(指向char指针的指针)相同,而int a[][20]相同与int (*a)[20](指向char[20]的指针)相同。

将相同的指针算法应用于int **a会产生与int (*a)[20]不同的结果。