Pointer syntax, though relatively straightforward, can be confusing at first.
Before we can use a pointer, the first thing we need is a pointer itself, so how do we declare one? Declaration of a pointer is done just like any other variable:
If you look at the declaration above, you'll notice that it looks the same as a declaration of an int, with the exception of the asterisk (*) in front of steve. The asterisk is used in a variable declaration to tell the computer we'd like a pointer. In the above case, we're asking the computer for a pointer variable, named steve that can point to a integer. To compare: int steve -> steve is an integer variable int *steve -> steve is a pointer variable that can point to an integer variable
Let's look at some more:
|Declaration||What it means|
|int steve||steve is an integer|
|int *steve||steve is a pointer to an integer|
|char steve||steve is a character|
|char *steve||steve is a pointer to a character|
|long steve||steve is a long integer|
|long *steve||steve is a pointer to a long integer|
|unsigned char steve||steve is an unsigned character|
|unsigned char *steve||steve is a pointer to an unsigned character|
But pointers can point to more than just the simple data types like integers and characters. We can have pointers to numerous instances of a data type. In fact, this is so common that it is given a separate name (an array) and a separate syntax. See the Arrays SparkNote for details on the use of arrays.
In addition, we can declare pointers to data types that we define ourselves: