记得a[i][j]是*(*(a+i)+j),不理解答案里的20,为何不是i*10+j*20?

记得a[i][j]是*((a+i)+j),不理解答案里的20,为何不是i10+j*20?

对于如下定义,则通过指针p来存取a[i][j]的表达式为:_

int a[10][20],  *p=&a[0][0];

(p+i20+j)

该回答引用GPTᴼᴾᴱᴺᴬᴵ
对于二维数组a[10][20],a[i][j]可以理解为第i行第j列的元素,也可以看做是第i个一维数组的第j个元素。因此,a[i][j]可以转化为*(a[i]+j)或者是*((a+i)+j)。
-
对于指针p,指向二维数组a[10][20]的首元素a[0][0],则p+i20+j的意义是将指针p向后移动i行(每行有20个元素,所以移动i*20个位置),再向后移动j个元素位置,指向a[i][j]。因此,答案中的20是一行元素个数20的含义,不是单纯的i和j的乘积。