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;
}