Explicame qué es un apuntador en el lenguaje de programación C
Claro, un puntero no es más que una variable que almacena la referencia de otra variable, con referencia me refiero al espacio de memoria en donde se encuentra esa variable, por ejemplo:

Si definimos una variable de la siguiente forma:
int numero1 = 10; <- esta variable se encuentra almacenada en el espacio de memoria 0x245342

Si definimos un puntero que apunte a la variable número:
int *numero_puntero = &numero1 -> a numero_puntero se le asigna el valor 0x245342

si ahora nosotros imprimieramos la variable numero_puntero, obtendríamos:
0x245342

Pero si por otro lado imprimieramos *numero_puntero: obtendríamos:
10

Al usar *, estamos haciendo uso del operador de indirección, lo que le indicamos que acceda directamente al valor que se encuentra almacenado en la dirección de memoria que previamente tiene, por lo que usando este mismo operador, podemos hacer modificaciones a la variable original desde el puntero.

*puntero_numero = 22; <- cambio se ve reflejado en la variable numero1