为什么第四个cout输出的第一个结果为3?

img

  • p是二维数组首地址,+2后会指向第1行第0列,所以是3
    静态二维数组空间是连续的,从数组首地址开始连续存储 1,2,3,4,5,6共六个元素。*p+2就是首地址开始偏移2个地址,就指向3了

把*p看成一个整体,把int (*p)[2]换成 int q[2]; 也就是让q=*p;
p= a就等价于&q = a;也就是q指向a[0][0]的地址(二维数组首地址)
第四行的 *p+2等价于q+2,q+2指针从二维数组移动2个int元素的位置,q是 int 数组,q移动1次就相当于移动到下一个int的地址,所以q+2就相当于移动到第3个int元素的地址。二维数组的存储结构是顺序存储,第三个数据就是a[1][0],所以输出是3