RE:¿para que son lo Punteros?
Como lo dijo antes Oliver++ los punteros son variables que guardan direcciones de memoria, no importa a que.
los punteros pueden tener tipo, como int, float, char, etc...
si un puntero es de tipo int, 'apunta' a una posicion de la memporia en la que, el contenido, te lo va a regresar como un int.
Me explico, un puntero, es solo eso, un puntero, si es de un tipo en especial, el compilador esperará que en la direccion de memoria que esta variable contiene exista un int, es decir, que si preguntas por el valor de ese puntero ( que se hace anteponiendo un *) el compilador esperará que lo estes tratando de recibir en una variable de tipo int.
Los vectores (o arreglos) y las matrices TAMBIEN son punteros, pero de largo fijo, es decir, la variable solo puede tomar valores desde una posicion de memoria inicial mas un offset, que es el largo. una matriz de A filas y B columnas es una porcion de memoria con A * B espacio asignado para guardar datos.
Un puntero se designa con un * en la definicion de la variable. un puntero a float llamado p se designa así:
float *p;
Los Strings (char * o char []) son punteros.
En el primer caso (char *) sin un largo especificado, por lo que debes asignarles memoria antes de utilizarlos con malloc.
En el segundo con un largo (para el programa).
En los dos casos son punteros a caracter.
SUERTE...