Un array es un puntero. La diferencia es, que en evz de apuntar a 1 variable, apunta a un conjunto de variables, una delante de otra (en memoria).
char nombre[10];
char *nombre;
¿Es lo mismo?
No, no lo es. El primero tiene 10 chars de memoria. El segundo, solo es un puntero.
A nivel práctico sí, ambos son punteros. Pero para utilizar el segundo como puntero, tienes que reservarle memoria:
char *nombre;
nombre
= (char*) malloc(sizeof(char) * 10);
Con eso, igualamos el puntero a una dirección de memoria que contiene 10 char.
Para acceder a cada uno, utilizas el operador []:
nombre[5] = 'C';
Si utilizas malloc para reservar memoria, luego tienes que liberarla: