APUNTADORES A ESTRUCTURAS

Cuando se usan apuntadores a estructuras el manejo de los campos varía. Cuando se usan campos de estructuras sin apuntador se hace de la siguiente forma:

Usando una definición como la siguiente:

Apuntadores a estructuras

Cuando se usan apuntadores a estructuras el manejo de los campos varía. Cuando se usan campos de estructuras sin apuntador se hace de la siguiente forma:

Usando una definición como la siguiente:

struct Registro {

 int edad;

 char letra;

 float numero;

}

Tendremos una variable estructura sin usar apuntador.

  // creación de la variable

struct Registro miRegistro;

  // uso del campo

miRegistro.edad = 18;

Cuando se usa una variable con apuntador a un registro ya no se usa el punto para conectar el nombre de la variable y el campo, sino la flecha compuesta por un guión y el símbolo de mayor así: "->". Observe como se accede al campo. Es importante resaltar la localización de la memoria

  // creación de la variable

struct Registro *miApuntador;

  // localización de la memoria

miApuntador = new struct Registro;

  // uso del campo.

miApuntador->edad = 18;

Los apuntadores a estructuras tienen los mismos pasos que los apuntadores a tipos primitivos. Por favor estudie el siguiente programa:

# include "iostream.h"

struct Registro {

 int edad;

 char letra;

 float numero;

}

main () {

  // definición de las variables

 struct Registro *miRegistro;

  // localización de la memoria necesaria

 miRegistro = new struct Registro;

  // asignación de los valores

 miRegistro->edad = 18;

 miRegistro->letra = 'B';

 miRegistro->numero = 3.5;

  // uso de las variables. Se procesa algo de información

 miRegistro->edad++;

 miRegistro->letra+=6;

 miRegistro->numero=miRegistro->numero / 2;

 cout << " La edad es : " << miRegistro->edad << endl;

 cout << " La letra es: " << miRegistro->letra << endl;

 cout << " El numero es: " << miRegistro ->numero << endl;

  // comparación  if (miRegistro->edad < 18)

  cout << "Tenemos un menor de edad:" << miRegistro->edad << endl;

 else

  cout << "Tenemos a un mayor de edad:" << miRegistro->edad << endl;

 if (miRegistro->letra < 70)

  cout << "La letra es:" << miRegistro->letra << endl;

  //  liberación de memoria usada

 delete miRegistro;

}

NOTA: Leyendo los comentarios del programa usted debe ser capaz de entender lo que está haciendo el programa.

 

//PROGRAMA DE ESTRUCTURA CON FUNCIONES Y MANEJO DE APUNTADORES

#include <iostream.h>

#include <conio.h>

struct alumno

{           char nombre[20];

            int edad;

}primaria;                   //PRIMARIA ES LA INSTANCIA DE LA ESTRUCTURA

 

void imprimedatos(struct alumno);                                     //FUNCIONES

struct alumno pidedatos(void);

void cargaEstructura(alumno *);

void imprimedatosApuntador(alumno *);

 

int main()

{                                                                                     

            clrscr();                                                              

//AQUI DECIMOS QUE LA INSTANCIA  SE ENCUENTRA DIRECCIONADA //MEDIANTE EL APUNTADOR HACIA LA ESTRUCTURA ALUMNO

            alumno *ap;

            ap=new alumno();

            cargaEstructura(ap);

            imprimedatosApuntador(ap);

            cout<<"\n FIN";

            getch();

            return 0;

}

//DEFINCIÓN DE LAS FUNCIONES

void cargaEstructura(alumno *una_estructura)

{

            cout<<"Dame el nombre\n";

            cin.getline(una_estructura->nombre,20);

            cout<<"\nDame la edad\n";

            cin>>una_estructura->edad;

}

struct alumno pidedatos(void)

{

            struct alumno miestructura;

            cout<<"\nDame el nombre\n";

            cin.getline(miestructura.nombre,50);

            cout<<"\nDame la edad\n";

            cin>>miestructura.edad;

            return miestructura;

}

void imprimedatos(struct alumno miestructura)

{

            cout<<"\nEl nombre es  "<<miestructura.nombre;

            cout<<"\nLa edad es  "<<miestructura.edad;

            cout<<endl;

}

void imprimedatosApuntador(alumno *miestructura)

{

            cout<<"\nEl nombre es "<<miestructura->nombre;

            cout<<"\nLa edad es "<<miestructura->edad;

            cout<<endl;

}