Ayuda con los punteros de C

A ver si me podéis ayudar, que me estoy comiendo la cabeza con una práctica, y como no puedo probarlo (no tengo gcc en mi ordenador). Os voy a poner en situación:
char *mapa; /*VARIABLE GLOBAL*/

funcion{
mapa = (char*)malloc(elementos); /*Reserva espacio en memoria*/
if(rellena(8,(char *)mapa,elementos)<0){
return -1; /*Supuestamente rellena datos en mapa, es una función que te dan ellos */
}

otrafuncion{
mapa[i]='1';
}

La duda es en otra función, es decir, partimos de un puntero a char sin inicializar, se le reserva memoria en la primera función. Y además se carga datos (eso está correcto casi al 99%, fijo xD), pero lo de otrafuncion no lo veo sentido, ya que no sé si es la forma correcta de acceder al contenido de un elemento de mapa y ponerle el valor de 1. Es un problema de conocimientos sobre punteros, nada más. :S

Otra cosa, si hago:
char valor = mapa[3];
Supuestamente le paso el contenido del vector a valor, pero al ser creado inicialmente como puntero, me entra dudas porque no lo he visto en ninguna parte que se pueda hacer esto. Sí, también aparece como pseudocódigo esto. :( A ver si vosotros que sabéis más me lo podéis resolver. Gracias.
Si, se puede. Ten en cuenta que un char* es como un vector de char al que tu le dices el tamaño que tiene que tener dinamicamente.
Entiendo lo que me dices, pero para dejarme claro la semántica xD, para obtener el contenido en memoria sería mapa[4] y para obtener la dirección del elemento 5 sería &mapa[4], no?

Por cierto, muchas gracias por la respuesta.

Edit: Sabía que se me olvidaba otra cosa, es en el caso de estructuras. Es decir.
struct tablas *tabla;
funcion{
tabla = (char*)malloc(elementos); /*Como antes se inicializa memoria*/
}
otra{
tabla[i]->posicion=0;
}


Para acceder al contenido de un atributo de elemento de la tabla, cuál sería correcto? Usar -> porque tabla es un puntero y como puntero a una estructura hay que usar -> o sería . que es la forma de acceder al contenido cuando no es un puntero.
2 respuestas