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

Como asignar que un puntero apunta a otro puntero

Estas en el tema de Como asignar que un puntero apunta a otro puntero en el foro de C/C++ en Foros del Web. Hola verán empiezo a tener problemas con los punteros y haber si alguien me puede decir como puedo apuntar a otro puntero. Es decir: punteroPrimer ...
  #1 (permalink)  
Antiguo 24/03/2012, 11:42
 
Fecha de Ingreso: mayo-2008
Mensajes: 315
Antigüedad: 15 años, 11 meses
Puntos: 7
Como asignar que un puntero apunta a otro puntero

Hola verán empiezo a tener problemas con los punteros y haber si alguien me puede decir como puedo apuntar a otro puntero.

Es decir:

punteroPrimer -> primer-> tNodo.

Se que seria algo así:
struct tNodo *primer;

struct tNodo *primer *punteroPrimer.

Alguien podría decirme como se define eso en C? Gracias.
  #2 (permalink)  
Antiguo 24/03/2012, 12:19
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Como asignar que un puntero apunta a otro puntero

Hola! para que un puntero apunte a otro puntero, tenes que declarar un puntero a puntero. Ejemplo simple:
Código C:
Ver original
  1. int main()
  2. {
  3. int A;
  4. int *p; // p es un puntero a entero
  5. int **pp; // pp en un puntero a puntero a entero
  6.  
  7. A=10;
  8. p=&A; // p apunta a A
  9. pp=&p; // pp apunta a p
  10. printf("%d %d %d\n",A,*p,**p); // va a imprimir 10 en todos los casos
  11. }

Saludos
  #3 (permalink)  
Antiguo 26/03/2012, 16:55
 
Fecha de Ingreso: mayo-2008
Mensajes: 315
Antigüedad: 15 años, 11 meses
Puntos: 7
Respuesta: Como asignar que un puntero apunta a otro puntero

Muchas gracias, empiezo a pillarlo :)

Vale dos preguntas mas, si yo asigno a dos punteros que apunten al mismo dato, al hacer free se me borra el dato o la vinculación y la memoria dinámica se pone disponible para otro dato? Es decir: struct Prueba *puntero1, struct Prueba *puntero2; puntero1=puntero2 free(puntero1); en ese caso el puntero2 quedaría inutilizado no?

Y la otra pregunta, cuando yo quiero devolver el registro completo al que apunta un puntero puedo hacer lo siguiente struct Prueba registro; registro=*puntero; return registro;

Muchas gracias, creo que si entiendo todo esto ya me doy por satisfecho jeje.
  #4 (permalink)  
Antiguo 26/03/2012, 20:27
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 3 meses
Puntos: 94
Respuesta: Como asignar que un puntero apunta a otro puntero

Hola! Primero la segunta pregunta: es correcto la forma de como lo pensas. De esa manera estarias almacenando en registro el contenido de lo apuntado por puntero

Ahora la primera: la asignacion que vos haces, puntero1=puntero2, es erronea si a puntero2 no le asignas nada antes. Siempre a un puntero hay q asignarle algo antes de utilizarlo, es decir a puntero2 antes habria que asignarle algo y recien podrias hacer puntero1=puntero2;

La funcion free se utiliza para liberar bloques de memorias que fue asignada dinamicamente, osea con funciones como malloc, realloc o calloc. En tu ejemplo si puntero1 o puntero2 en ningun momento se le asigno memoria dinamicamente no se puede utilizar free.
Fijate que en el ejemplo que te di anteriormente en ningun momento use free ya que no use malloc,realloc o calloc

Te doy un ejemplo sencillo que utiliza memoria dinamica(con malloc) y libera esa memoria con free
Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct PRUEBA {
  4.    int num;
  5. };
  6. int main(void) {
  7.    struct PRUEBA *prueba;
  8.    prueba=malloc(sizeof(struct PRUEBA)); // le digo a prueba q apunte al bloque de memoria que devuelve malloc
  9.    scanf("%d",&prueba->num);
  10.    printf("El numero ingresado es: %d\n",prueba->num);
  11.    //libero el bloque de memoria a donde apunta prueba
  12.    free(prueba);
  13.    return 0;
  14. }

Conclusion: "al hacer free se me borra el dato o la vinculación y la memoria dinámica se pone disponible para otro dato?" SI
"struct Prueba *puntero1, struct Prueba *puntero2; puntero1=puntero2 free(puntero1); en ese caso el puntero2 quedaría inutilizado no?" NO, el puntero2 se puede utilizar para otra cosa; NO QUEDA INUTILIZADO

Espero no habert confundido :S, Saludos

Última edición por cesar_casla; 26/03/2012 a las 20:43
  #5 (permalink)  
Antiguo 28/03/2012, 07:39
 
Fecha de Ingreso: mayo-2008
Mensajes: 315
Antigüedad: 15 años, 11 meses
Puntos: 7
Respuesta: Como asignar que un puntero apunta a otro puntero

Muchisimas gracias de verás, ahora ya entiendo bien la utilización de los punteros, no sabes lo que me alegra. Gracias

Etiquetas: puntero, struct
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 13:47.