Let us consider the following piece of code:

```
#include <stdio.h>
int main()
{
    int v1, v2, *p;
    p = &v1;
    v2 = &v1;
    printf("%d\t%d\n",p,v2);
    printf("%d\t%d\n",sizeof(v2),sizeof(p));
    return 0;
}

```

We can see, as expected, that the v2 variable (`int`) occupies 4 bytes and that the `p` variable (`int` pointer) occupies 8 bytes.

So, if a pointer occupies more than 4 bytes of memory, why we can store its content in an `int` variable?

In the underlying implementation, does the pointer variables store only the memory address of another variable, or it stores something else?