Un cast es convertir un tipo a otro.
Hay cast implicitos (el compilador los hace solito, sin que nadie le diga nada). Por ejemplo
float a;
int b;
a = b; // funciona bien gracias a que el int b se convierte a float antes de asignarlo.
Puede ser explicito, es decir, tu dices la conversión
a = (float)b; // Haces que b sea float
Los cast explicitos son más útiles con punteros. Por ejemplo, si tienes un puntero char * a una zona de memoria que tu sabes que contiene enteros, haces la conversion
char *a;
int *b;
b = (int *) a;
También es útil para obtener más precisión en las cuentas. Por ejemplo
int a = 3;
a/2 daría 1 (son todo enteros y resultado sale entero y sin decimales)
((float)a )/2 daría 1.5 ( (float)a es flotante y el resultado daria con decimales).
etc, etc
Puedes incluso hacer cast entre clases distintas, siempre y cuando redefinas el operador adecuado.
Se bueno