the column pointer p1 is defined as below

```
int a[3][4]={{1,3,5,7},
            {9,11,13,15},
            {17,19,21,23}};
int *p1= &a[0][0];

```

Then,`p[i]` represent the i'th element in the array, e.g., `p1[4]=9`

And I know the row pointer `p2`

```
int (*p2)[4] = a;

```

I can use `p2[i][j]` to get the `a[i][j]`.

But, why can't I get the correct result by using `(&p1)[i][j]`? I think `(&p1)` is equal to `p2`, but in fact I can't understand the result.

I try to print the value of `(&p1)[0][0]),(&p1)[0][2]),(&p1)[1][0]),(&p1)[1][2])`, part of them are correct. It's weird.

[![Output Screen-grab](https://i.stack.imgur.com/DSKQx.png)](https://i.stack.imgur.com/DSKQx.png)