Excelsior Li 2023-02-23 11:46 采纳率: 93.9%
浏览 28
已结题

记得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)

  • 写回答

1条回答 默认 最新

  • MarkHan_ 2023-02-23 11:54
    关注

    该回答引用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的乘积。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月3日
  • 已采纳回答 2月23日
  • 修改了问题 2月23日
  • 创建了问题 2月23日