int *p; // dereferencing "p" gets you an "int"
int **q; // dereferencing "q" twice gets you an "int"
char a[10]; // subscripting "a" gets you a "char"
void (*f)(void); // calling f() gives you "void"
People who write the asterisk next to the type often have a hard time understanding this.