2016-09-25 89 views
-1

ReadVector()为什么我写int a[][20][20]的目的是什么。为什么我不能写a[][]为什么int数组[] [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];` 

回答

-1

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

由于int a[][]相同int **a(指针的指针char),这是不一样int a[][20]其是相同int (*a)[20](一个指针指向一个char[20])。

将同样的指针运算,以int **a导致不同的东西,然后它会为int (*a)[20]

+0

嗯,为什么下降投票? – alk

2

当您通过a[i]第二维必须知道,要获得正确的内存地址存取权限行,因为

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

所以,当你存取权限的元素,偏移通过计算:

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

只要考虑如何在矩阵中找到位置为[i][j]的元素(如果仅允许从第一个元素开始计数元素)来进行这项工作,您必须知道至少有多少元素连续。

相关问题