Buenas tardes a todos!
Soy nuevo en este foro, y espero que me puedan ayudar a resolver una duda que tengo con una implementacion de pilas dinamicas en C.
En realidad, la duda no es sobre la implementacion de las pilas en si, sino de una parte del codigo de la misma. Las pilas estan definidas de esta forma, mediante un struct:
typedef void *dato_t;
typedef struct{
dato_t *datos;
int tope;
int tamanio;
}pila_d;
Ahora, como veran, datos es un puntero a datos_t, que imaginemos, lo redefino para que sea de tipo int. La duda, entonces, es como accedo a datos:
bool pila_apilar(pila_d *pilad, dato_t valor){
if(pilad->tope >=pilad->tamanio){
if(!pila_cambiar_tamanio(pilad,pilad->tamanio*2)){
return false;}}
pilad->datos[pilad->tope++] = valor;
return true;
}
LO que hace esta parte es, si el tope es igual al tamaño, entonces le asigna el doble de memoria a ese puntero. Eso esta claro (no pongo la funcion, pero practimante es un mallo con el tamanio de tamanio por el tamanio del tipo de dato). Lo que no entiendo, es esto:
pilad->datos[pilad->tope++] = valor;
asgina a datos, que es un puntero a dato_t (digamos, int) como si fuese un array. Lo que no logro entender es eso: si realmente un array no es mas que un puntero del cual se reserva tanta memoria como se pida para tantos elementos del tipo que se especifique? y los indices serian para ver en que porcion de la memoria estoy?
Si es asi, ya comprendo como funciona esa parte del codigo, al igual que los arrays. si no es asi, entonces, si alguien me podria ayudar, mejor!
desde ya, muchas gracias por su ayuda, espero haber sido claro!
pablo