Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda punteros

Estas en el tema de Duda punteros en el foro de C/C++ en Foros del Web. Buenas tardes a todos! espero que me puedan ayudar a resolver una duda que tengo con una implementacion de pilas dinamicas en C. En realidad, ...
  #1 (permalink)  
Antiguo 30/09/2009, 13:28
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 15 años, 8 meses
Puntos: 1
Duda punteros

Buenas tardes a todos!

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:

[code=c]typedef void *dato_t;

typedef struct{
dato_t *datos;
int tope;
int tamanio;
}pila_d;[/code]

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:

[code=c]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;
}[/code]

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:

[code=c]pilad->datos[pilad->tope++] = valor;[/code]

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
  #2 (permalink)  
Antiguo 30/09/2009, 16:48
 
Fecha de Ingreso: septiembre-2009
Mensajes: 56
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Duda punteros

Efectivamente,
un array es un puntero al que se le han asignado varias posiciones de memoria

datos[0] es lo mismo que *datos
datos[1] es lo mismo que *(datos+1)
datos[2] es lo mismo que *(datos+2)

"datos" es la dirección de un espacio de memoria, cuando decimos " *datos " estamos indicando que revise lo que se encuentra guardado en esa dirección de memoria; cuando decimos " *(datos+1) " estamos indicando que revise lo que hay dentro de la siguiente dirección de memoria. Los arrays y esto son exactamente lo mismo.

Saludos.
  #3 (permalink)  
Antiguo 30/09/2009, 17:49
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: Duda punteros

ahora me cierra todo, y de hecho, es como sospechaba!

muchas gracias!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:10.