Hola,
Básicamente se puede decir que un puntero es un tipo de variable de tamaño DWORD, su contenido es una dirección de memoria que contiene un valor.
Aclarando un poco:Toda variable tiene un valor, solo que el valor de un apuntador es una dirección en memoria. Para asignarse se utiliza el operador "&" el cual proporciona la dirección de memoria de una variable, y para hacer referencia al contenido de un puntero se utiliza el operador de desreferencia "*".
int nVal = 5;
int * lpVal = &nVal
/* nVal == *lpVal;*/
Los famosos arreglos no son más que punteros a un determinada cantidad de un determinado tipo de datos, dicha información puede desreferenciarse utilizando índices o el operador de desreferencia:
int * p
= (int*) malloc(5 * sizeof(int)); /* *(p + n) == p[n] */
Creo que te conviene bastante leer un manual completo ya que pueden haber bastantes casos y detalles que explicar, pero en general:
Un puntero es una variable cuyo contenido es una dirección en memoria.Un saludo,
Iván Portilla.