I have the following code:

```
#include <iostream>
using namespace std;
int main()
{
    int g[] = {9,8};
    int (*j)[2] = &g;
    cout << "*(j):" << *(j) << endl;
    cout << "j:" << j << endl;
    cout << "&j:" << &j << endl;
    cout << "&(*j)" << &(*j) << endl;
    cout << "*(*j):" << *(*j) << endl;
    return 0;
}

```

which ouputs:

```
*(j):0x7fff5ab37c7c
j:0x7fff5ab37c7c
&j:0x7fff5ab37c70
&(*j)0x7fff5ab37c7c
*(*j):9

```

I think that j is a pointer to an array of two integer.

And &g is the address of the whole array.

Then j store the address of the whole array.

And so I use the \*(j), it will dereference the first element in the array.

But the result said that \*(j) store the array address the same value as j.

I cannot figure out how this happened.