You need to distinguish the variable and the pointer to the variable. When we declare:
int x;
int *p;
x = 1; // direct assignment to x
p = &x; // the value of p is the address-of x
*p = 42; // assigns a value to the variable pointed to by p
// (in this case, indirect assignment to x)
The variable x has type int; i.e. it is a variable to which we can assign an int directly, or a pointer-to-int can refer to its location.
p is a different variable, with type "pointer to int".
We can set p to the location of x (&x); then
we can store 42 in "the variable pointed to by p".