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.