Você está na página 1de 11

Estructuras

CONTENIDO
Definición de tipos y declaración de variables Estructura
Acceso a los campos de una Estructura
Tablas de estructuras
Paso de parámetros de tipo Estructura
 Por valor
 Por referencia - variable
Estructuras anidadas
Curso 05-06. Práctica 6 1
Estructuras

➨Una estructura es un conjunto de datos (llamados campos),


con las siguientes propiedades:
 Pueden ser de distinto tipo (int, char, float, etc.).
 Se denominan por identificadores distintos.

¡La estructuras de C son los registros


de LEA!

Curso 05-06. Práctica 6 2


Estructuras

Declaración de estructura (tipos y variables): (LEA vs C)


LEA C
tipos typedef struct
Tr: registro {
c1: T1 T1 c1;
c2: T2 T2 c2;
... es un tipo de
...
Tn cn; datos, ¡no
cn: Tn ocupa
fregistro } Tr; es una
memoria!
variable y por
Tr r; tanto ocupa
variables
memoria
r: Tr Tr r =Se{v1,
pueden...,
v2,
vn};inicializar en el
momento de la
declaración
Curso 05-06. Práctica 6 3
Estructuras

Declaración de estructura (tipos y variables): (Ejemplo)


LEA C
tipos typedef struct
Tpersona: registro {
nombre: cadena Cadena nombre,
apellido1: cadena apellido1, apellido2;
int edad;
apellido2: cadena
long dni;
edad, dni: entero char sexo;
sexo: caracter } Tpersona;
fregistro
Tpersona empleado;
Tpersona
variables
empleado={"Alicia",
Se pueden
empleado: Tpersona
"Gómez", "Cruz", 21,en el
inicializar
12345678,momento
'm'}; de la
declaración
Curso 05-06. Práctica 6 4
Estructuras

Acceso a los campos de una estructura: (LEA vs C)


LEA C
tipos typedef struct
Tr: registro {
c1: T1 T1 c1;
c2: T2 T2 c2; Son necesarios los
... paréntesis porque el
...
cn: Tn Tn cn;operador “.” es de
} Tr; mayor precedencia
fregistro
que el “*”
variables Tr r, *pr;
r: Tr Acceso a través de variable
estructura
Acceso
r.ci
r.ci Acceso a través de puntero
a estructura
Curso 05-06. Práctica 6 5
Estructuras

Acceso a los campos de una estructura: (Ejemplo)


LEA C
tipos typedef struct
Tpersona: registro {
nombre: cadena Cadena nombre,
apellido1: cadena apellido1, apellido2;
apellido2: cadena int edad;
edad, dni: entero long dni;
sexo: caracter char sexo;
fregistro } Tpersona;
variables Tpersona empleado, *p;
empleado: Tpersona
Acceso a través de variable
Acceso estructura
empleado.nombre := strcpy (empleado.nombre,
"Alicia" "Alicia");
escribir empleado.edad printf ("%d",
Curso 05-06. Práctica 6 empleado.edad); 6
Estructuras

Tablas de estructura: (LEA vs C)

LEA C

tipos typedef Tr Ttabla[dim];


Ttabla: tabla [dim] de Tr
variables Ttabla nombre;
nombre: Ttabla

Es una tabla
unidimensional (un
vector), y cada uno
de sus elemento es
una estructura (un
registro)
Curso 05-06. Práctica 6 7
Estructuras

Tablas de estructuras: (Ejemplo)


LEA C
constantes
N: 200 #define N 200
tipos
Acceso
Ttpersona: tabla [N] deal tercer typedef
carácter del
Tpersona
Tpersona nombre del décimo alumno
Ttpersona[N];
variables
LEA:
tab_alumno: Ttpersona Ttpersona tab_alumno;
tab_alumno[10].nombre[3]
C:
Acceso a los elementos de la tabla
tab_alumno[9].nombre[2]
elemento i-ésimo: elemento i-ésimo:
tab_alumno[i].nombre tab_alumno[i-1].nombre
Curso 05-06. Práctica 6 8
Estructuras

Paso de estructura como parámetros de entrada: (Ejemplo)


LEA C
empleado: Tpersona Tpersona empleado;
Llamada: Prototipo:
escribe_empleado void escribe_empleado
(empleado) (Tpersona);
Definición: Llamada:
proc escribe_empleado (ent escribe_empleado
e: Tpersona) (empleado);
Definición:
prin
void escribe_empleado
escribir e.nombre,
(Tpersona e)
e.apellido1, e.apellido2
{ printf ("%s %s, %s\n",
escribir e.edad, e.dni,
e.nombre,
e.sexo
Curso
e.apellido1, 9
fin 05-06. Práctica 6
Estructuras

Paso de estructura como parámetros de salida: (Ejemplo)


LEA C
empleado: Tpersona Tpersona empleado;
Llamada: Prototipo:
lee_empleado (empleado) typedef Tpersona *
No son necesarios los
PTpersona;
Definición: paréntesis
void porque el
lee_empleado
proc lee_empleado (sal e: operador “->” es de
(PTpersona);
Tpersona) mayor precedencia que
Llamada:
prin el “&”
lee_empleado
leer e.nombre, (&empleado);
e.apellido1, e.apellido2 Definición:
leer e.edad, e.dni, e.sexo void lee_empleado
(PTpersona e)
fin
{ gets (e->nombre);
gets ((*e).apellido1);
Curso 05-06. Práctica 6 gets (e->apellido2);10
Estructuras

Acceso a los campos de una estructura anidada: (Ejemplo)

C
typedef struct typedef
{ struct
Cadena nombre, apellido1, apellido2;
{
fecha f_nac; int dia;
long dni; int mes;
char sexo; int anyo;
} Tpersona; } fecha;
Tpersona empleado;
Acceso
printf ("%d/%d/%d", empleado.f_nac.dia,
De lo general a lo
empleado.f_nac.mes,empleado.f_nac.anyo);
particular
Curso 05-06. Práctica 6 11

Você também pode gostar