elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Punteros a estructuras...???
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Punteros a estructuras...???  (Leído 2,660 veces)
Ja_90

Desconectado Desconectado

Mensajes: 51



Ver Perfil
Punteros a estructuras...???
« en: 11 Noviembre 2014, 04:38 am »

Buenas por aqui otra vez jejeje..tratando de resolver dudas...
Estoy aprendidendo y leyendo acerca de los punteros...
Mi duda surge cuando quiero utilizar los punteros con estructuras..

Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::cin;
  4. using std::endl;
  5.  
  6. struct Estructura
  7. {
  8.     string nombre;
  9.     int Edad;
  10. };
  11.  
  12. int main()
  13. {
  14.    Estructura persona[2];  
  15.  
  16.    Estrucputa *ptr_persona = NULL; // Declaro puntero y lo inicializo
  17.  
  18.    // Hasta aqui todo va bien, pero como asigno el nombre y la edad que se
  19.    // pida al usuario para llenar el arreglo persona[2]
  20.  
  21.    // Normalmente sin punteros seria asi:
  22.  
  23.   for (int i=0 ; i<2 ; i++)
  24.   {
  25.       cout << "Ingrese nombre: ";
  26.       getline(cin,persona[i].nombre);
  27.       cout << "Ingrese edad: ";
  28.       cin >> persona[i].edad;
  29.       cin.ignore();
  30.   }
  31.  
  32.  // Y para imprimirlo seria:
  33.  
  34.   for (int i=0 ; i<2 ; i++)
  35.   {
  36.       cout << persona[i].nombre << endl;
  37.       cout << persona[i].edad << endl;
  38.   }
  39. }
  40.  

  Como haria esto con punteros??...Quiero ver como hacerlo con un ejemplo sencillo a ver si
  Puedo lograr algo mas complicado y entender como funcionan los punteros con las estructuras.
  He leido bastante pero no he visto un ejemplo concreto donde pueda ver esto que quiero hacer...

Muchas Gracias a quien me pueda colaborar, ando de autodidacta y no tengo a quien preguntar
en mi entorno acerca de estos temas.

EDITO: Es mediante la asignacion dinamica de memoria (eso creo), seguire leyendo, igualmente si alguien me  puedo dar una breve explicacion lo apreciaria mucho...


« Última modificación: 11 Noviembre 2014, 05:05 am por Ja_90 » En línea

:D  ::::Ja_90::::   :D
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Punteros a estructuras...???
« Respuesta #1 en: 11 Noviembre 2014, 13:48 pm »

Código
  1. ptr_persona = new Estructura[2];


El resto es igual.

Por cierto, pusiste Estrucputa en vez de Estructura.


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Punteros a estructuras...???
« Respuesta #2 en: 11 Noviembre 2014, 14:36 pm »

Lo que te ha comentado ivancea96 es correcto.

Sin embargo creo que es conveniente hacer una matización:

* Si accedes a una estructura por valor, tienes que usar el operador de miembro '.' para acceder a sus elementos.
* Si accedes a una estructura a través de un puntero, entonces el operador que te permite acceder a los miembros de la estructura es el operador de puntero '->'.

Un ejemplo:

Código
  1. struct Estructura
  2. {
  3.  int dato;
  4. };
  5.  
  6. int main( )
  7. {
  8.  Estructura var1;
  9.  var1.dato = 5; // a var1 accedemos por valor.
  10.  
  11.  Estructura* ptr = &var1;
  12.  // ptr es un puntero, para acceder al miembro de la estructura tenemos que usar un el operador de puntero
  13.  std::cout << ptr->dato << std::endl;
  14.  
  15.  Estructura* lista = new Estructura[ 2 ];
  16.  
  17.  // "lista" es un puntero, pero "lista[x]" no, aquí estamos accediendo a la estructura por valor, necesitamos
  18.  // el operador de miembro
  19.  lista[ 0 ].dato = 44;
  20.  
  21.  Estructura** lista2 = new Estructura*[ 2 ];
  22.  lista2[ 0 ] = new Estructura( );
  23.  lista2[ 1 ] = new Estructura( );
  24.  
  25.  // "lista2" es un puntero doble, por tanto, "lista2[x]" es un puntero a una estructura. Para acceder a los
  26.  // miembros de dicha estructura necesitamos el operador de puntero.
  27.  lista2[ 0 ]->dato = 85;
  28.  
  29.  // Faltan los correspondientes "delete" para liberar la memoria reservada, pero no es lo que se
  30.  // está preguntando en este hilo.
  31. }
En línea

Ja_90

Desconectado Desconectado

Mensajes: 51



Ver Perfil
Re: Punteros a estructuras...???
« Respuesta #3 en: 11 Noviembre 2014, 19:24 pm »

Muchas gracias a ambos por sus respuestas...

eferion respecto a liberar memoria con delete, tengo entendido que siempre se debe realizar para que dicha memoria utilizada se pueda reutilizar por asi decirlo y evitar el desbordamiento (overflow), para asi evitar que el programa colapse. y segun lei se debe hacer asi:

Código
  1. delete [] (Nombre puntero);

Estoy en lo correcto?...eso es cuando tengo un arreglo de lo contrario solo seria :

Código
  1. delete (Nombre puntero);
« Última modificación: 11 Noviembre 2014, 20:38 pm por Ja_90 » En línea

:D  ::::Ja_90::::   :D
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Punteros a estructuras...???
« Respuesta #4 en: 11 Noviembre 2014, 21:10 pm »

lo que creas con new, lo borras con delete y lo que creas con new[] lo tienes que borrar con delete[]:

Código
  1. int* ptr = new int;
  2. delete ptr;
  3.  
  4. ptr = new int[10];
  5. delete[] ptr;
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[C] Estructuras y punteros a funciones
Programación C/C++
Amadeo Magnus 1 6,305 Último mensaje 13 Octubre 2010, 15:05 pm
por Karman
estructuras punteros programacion c
Programación C/C++
adexrn 4 3,822 Último mensaje 9 Abril 2012, 10:10 am
por adexrn
Error al crear punteros a estructuras.
Programación C/C++
NikNitro! 2 2,240 Último mensaje 5 Marzo 2015, 17:11 pm
por NikNitro!
Estructuras con Punteros
Programación C/C++
jgonzalezo 1 1,848 Último mensaje 13 Abril 2015, 09:02 am
por eferion
Duda con estructuras y punteros
Programación C/C++
Miguel2097 4 2,637 Último mensaje 12 Diciembre 2016, 07:57 am
por Miguel2097
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines