The purpose of a pointer is to save the address of a specific variable. Then the memory structure of following code should look like:
int a = 5; int *b = &a;
There are different types. And there is a good reason for it:
Having …
int a = 5; int *b = &a; int **c = &b;
… the expression …
*b * 5
… is valid, while the expression …
*c * 5
makes no sense.
The big deal is not, how pointers or pointers-to-pointers are stored, but to what they refer.