Pointers can be an intimidating concept. One resource I have found particularly helpful is the C++ Language tutorial on pointers. Quoting from that tutorial:

The variable that stores the address of another variable is what in C++ is called a pointer.

Pointers are said to “point to” the variable whose address they store.

One thing that can be potentially confusing when initially working with pointers in C++, is that the asterisk (*) symbol has two unrelated usages in the context of pointers.

One way the asterisk symbol is used is when declaring a pointer variable, like this: int * mypointer;. This defines a pointer named mypointer that points to underlying data of type int.

The second way the asterisk symbol is used is as the dereference operator. For example, baz = *foo; means, “set baz equal to the value pointed to by foo“.

The tutorial summarizes this nicely:

Note that the asterisk (*) used when declaring a pointer only means that it is a pointer (it is part of its type compound specifier), and should not be confused with the dereference operator seen a bit earlier, but which is also written with an asterisk (*). They are simply two different things represented with the same sign.