用指针输出数组的值为什么出现错误

为什么语句输出语句(p+2)+3)错误而*(p+2)+3正确,再问值为什么是6而不是12,不是说a[i][j]=*(*(p+i)+j)嘛?

img

建立先把一级指针和二级指针的概念搞清楚还有数组在内存上的分布


```c
int *p = a[0]; /* a[0]相当于a[0][0]的地址,p是一级指针 */

*(p + 2) /* p为int类型的指针,偏移两个单位 即a[0][0]向后偏移两个单位为a[0][2] = 3 */

*(p + 2) + 3 /* 3+3=6 */

*( *(p + 2) + 3 )  /* 知道为什么错了吧hh */

```

int *p=a[0];//这样就把a[0]中存放的int *指针给了p
(p+2)+3;//这句相当于(a[0]+2)+3,就相当于a[0][2]+3=3+3=6