在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];`
答案 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]
不同的结果。