You are on page 1of 7

V. Estructuras y uniones.

5.1 Estructuras: Es un tipo de dato definido por el usuario, que contiene un conjunto de
miembros, cada uno perteneciente a un tipo de dato primitivo (enteros, flotantes, caracteres,
punteros, arreglos y otras estructuras como elementos dentro de una estructura.

5.1.1. Definicin de una estructura.


Los formatos para definir una estructura son los siguientes:
Formato 1:
struct marca {
miembro1;
.
.
.
miembron;
};
tipo_almacenamiento struct marca variable1, variable2, ...variablen;
struct : Palabra reservada que identifica la estructura.
marca: Nombre que identifica la estructura.
miembro1, ... miembron: Un miembro puede ser una variable primitiva, punteros,
arreglos, u otras estructuras.
Reglas:
Los nombres de los miembros deben ser todos diferentes, pero el nombre de
un miembro puede ser el mismo que el de una variable definida en otra parte
del programa.
No se puede asignar un tipo de almacenamiento a un miembro individual.
No se puede inicializar dentro de la declaracin del tipo de la estructura a
un miembro.
tipo_almacenamiento : Es opcional. Es el tipo de almacenamiento especificado a la
estructura.
variable1, variable2, ... variablen: Son las variables que permitirn el acceso a los
miembros de la estructura.
Ejemplo 1:

nombre de la
estructura

struct expe
{ char nom [20] ;
char ced [12] ;
float indice ;
};
struct expe estu_des, estu_redes ;

expe

(estructura)
(miembro 1)
nom

nombres de las variables


que maneja la estructura

(miembro 2)
ced

indice

Formato 2:
tipo-almacenamiento

struct marca
la marca es opcional
{ miembro1;
.
.
.
miembron;
} variable1, variable2, ...variablen;

Ejemplo 1:

nombre de la
estructura

(miembro 3)

expe

(estructura)

nombre de las variable


que maneja la estructura

struct expe {
char nom [20] ;
char ced [12] ;
float indice;
} estu_des, estu_redes ;

nom
(miembro 1)
ced
(miembro 2)
indice
(miembro 3)

Ejemplo 2 :

expe

struct {
char nom [20] ;
char ced [12] ;
float indice;
} estu_des, estu_redes ;

Ejemplo 3:
struct fecha {
int d;
int m;
int a;
};
struct expe {
char nom[20];
char ced[12] ;
float indice ;
struct fecha ingreso;
} estu_des, estu_redes;

(estructura)

nombres de las variables


que maneja la estructura

nom
(miembro 1)
ced
(miembro 2)
indice
(miembro 3)

estructura
fecha

estructura expe

expe

(estructura)
nom

variable de la
estuctura fecha

miembro1

ced

miembro2

indice
miembro3
variables de las
estructuras expe

fecha

(estructura)
d

miembro1

miembro2

miembro3

Inicializacin de una estructura: Para inicializar a los miembros de una estructura se


requiere que el tipo de almacenamiento sea esttico.
Ejemplo:
struct fecha {
int d;
int m;
int a ;
struct expe {
char nom [20] ;
char ced [12] ;
float indice ;
struct fecha ingreso;
};
static struct expe estu_des = { Pedro Caballero , 3-12-14 , 2.20, 10092004};

ced
nom

Se utilizan las comas para separar los datos.

5.1.2. Procesamiento de una estructura:

indice

ingreso

Los miembros de una estructura se pueden accesar de manera individual.


Formato 1:

(Acceso a un miembro)
variable.miembro

variable: es un nombre de variable perteneciente a una tipo de dato struct.


miembro: es un nombre de miembro dentro de la estructura.
. : es un operador de mayor prioridad y su asociatividad es de izquierda a derecha.
Ejemplo:
estu_des.nom

estu_des.ced

estu_des.indice

3-12-14

2.20

Pedro Caballero

estu_des.ingreso
10092004

Por lo que se pueden realizar las siguientes expresiones:


estu_des.indice --

++estu_des.indice

Formato 2:
(Acceso a un submiembro)
variable.miembro.submiembro

Ejemplo:

(Basado en los ejemplos anteriores)

estu_des.ingreso.d

estu_des.ingreso.m

estu_des.ingreso.a

10
09
2004
Para leer en una estructura se tiene que tener las siguientes consideraciones:
Al leer un miembro cadena no se pone & por delante porque sucede igual
que un arreglo.
Ejemplo:
estu_des .nom accede la direccin de comienzo de memoria
donde est estu_des.nom
Al leer un miembro int o float si se le pone & por delante.
Ejemplo:

&estu_des.indice
5.1.5 Arreglos de estructura:

accede la direccin de comienzo de estu_des.indice

Es posible definir un arreglo de estructuras, en donde cada elemento es una estructura.


Formato1:
struct marca
{
miembro1;
.
.
.
miembron;
};
tipo_almacenamiento struct marca variable[ ]= { valor1, ...valorn};
Formato 2:
struct marca
{ miembro1;
.
.
.
miembron;
} variable[n];

//en donde n es la cantidad de elementos

Ejemplo:
struct expe {
char nom [20] ;
char ced [12] ;
float indice ;
struct fecha ingreso;
};
static struct expe estu_des[ ] =
{Pedro Chen, 3-12-14 ,2.20,10092004,Norma Arauz,2-12-4,2.75,12082005};
elemento 0
elemento 1
El tamao est sin especificar. Los valores iniciales definirn el tamao del arreglo y la
cantidad de memoria necesaria para almacenar el arreglo.
Procesamiento de un miembro de un arreglo de estructura:
Formato:
Ejemplos:
estu_des[1].nom

nombre_arreglo [expresin] miembro

accesa el contenido nom del elemento [1] del arreglo. El cual es


Norma Araz
estu_des[1].indice accesa el contenido del elemento [1] del arreglo. El cual es
2.75

5.1.6 Estructuras y punteros:

La direccin de comienzo de una estructura puede accesarse de la misma manera que


cualquier otra direccin, mediante el uso del operador direccin (&).
Formato:
struct marca
{ miembro1;
.
.
.
miembron;
} variable1, *ptvar;
Ejemplo:
struct expe {
char nom[15];
char ced[12];
float indice;
} estu_des, *pc;
pc=&estu_des;
//inicializacin del puntero
Un miembro de una estructura puede accederse en trminos de su correspondiente variable
puntero escribiendo:
Formato:
ptvar miembro

Esto es equivalente a variable miembro

ptvar : puntero variable a estructura.

: Es un operador comparable al operador punto ( ) discutido antes en clase.


Ejemplos:
Sin puntero
estu_des.indice
estu_des.ingreso.mes
estu_des.nom
estu_des.nom[2]
o
*(estu_des.nom+2)

Con puntero
pc indice

Con puntero

pc ingreso.mes
pc nom

(*pc).ingreso.mes

pc nom[2]

(*pc).nom[2]

pc (nom + 2)

5.1.4 Paso de estructura a una funcin

(*pc).indice
(*pc).nom

*((*pc).nom+2)

Una estructura se puede pasar a una funcin, transfiriendo la estructura completa o sus
miembros individualmente.
Paso de miembros individuales: Si el miembro es una variable primitiva el paso es por
valor y si el miembro es un arreglo es pasado por referencia (son procesados dentro de la
funcin como se explico en el captulo anterior), porque quienes reciben los valores son
parmetros formales y esos parmetros formales no son miembros de una estructura.
Paso de una estructura: Una estructura se puede pasar de dos formas.
Por valor , pasando la estructura sin &.
Ejemplo: estu_des
Por referencia, pasando la estructura con &.
Ejemplo:

&estu_des

You might also like