为什么是 int array[][20]

Why int array[][20]?

本文关键字:array int 为什么      更新时间:2023-10-16

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

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

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

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

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

试想一下,如果只允许你计算从第一个元素开始的元素,你将如何在矩阵中的位置[i][j]找到一个元素......要完成这项工作,您必须至少知道连续有多少个元素。

为什么我写不a[][]

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

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