|
|
|
||
|
|
|||
|
|
|||
|
Lenguaje c |
|||
|
7) Estructuras |
|||
|
|
Declaración de Estructuras Así como los arrays son organizaciones secuenciales de variables simples , de un mismo tipo cualquiera dado , resulta necesario en multiples aplicaciones , agrupar variables de distintos tipos , en una sola entidad . Este sería el caso , si quisieramos generar la variable " legajo personal " , en ella tendriamos que incluir variables del tipo : strings , para el nombre , apellido , nombre de la calle en donde vive , etc , enteros , para la edad , número de codigo postal , float ( ó double , si tiene la suerte de ganar mucho ) para el sueldo , y así siguiendo
Existe
en C en tipo de variable compuesta , para manejar ésta situación típica de
las Bases de Datos , llamada ESTRUCTURA . No hay limitaciones en el tipo ni
cantidad de variables que pueda contener una estructura , mientras su
máquina posea memoria suficiente como para alojarla , con una sóla salvedad
: una estructura no puede contenerse a sí misma como miembro.
|
||
|
struct
legajo { int edad ; char nombre[50]; float sueldo; };
En la
primer sentencia se crea un tipo de estructura , mediante el declarador
"struct",luego se le dá un nombre " legajo " y finalmente , entre llaves se
declaran cada uno de sus miembros , pudiendo estos ser de cualquier tipo de
variable , incluyendo a los arrays ó aún otra estructura . La única
restricción es que no haya dos miembros con el mismo nombre , aunque sí
pueden coincidir con el nombre de otra variable simple , ( o de un miembro
de otra estructura ) , declaradas en otro lugar del programa. Esta sentencia
es sólo una declaración , es decir que no asigna lugar en la memoria para la
estructura , sólo le avisa al compilador como tendrá que manejar a dicha
memoria para alojar variables del tipo struct legajo . struct legajo { int edad ; char nombre[50] ; float sueldo ; } legajo_vendedor , legajo_programador ; Y si nó fueran a realizarse más declaraciones de variables de éste tipo , podría obviarse el nombre de la estructura ( legajo ). Las variables del tipo de una estructura , pueden ser inicializadas en su definición , así por ejemplo se podría escribir:
struct
legajo { int edad ; char nombre[50] ; float sueldo ; char observaciones[500]
; } legajo_vendedor = { 40 , "Juan Eneene" , 1200.50 , "Asignado a zona A" }
; Acá se utilizaron las dos modalidades de definición de variables , inicializandolas a ambas .
Reglas
para el uso de Estructuras
strut
posicion_de {
fin_recta.eje_x = 10.0 ; if( fin_recta.eje_x == inicio_recta.eje_x ) Es muy importante recalcar que , dos estructuras , aunque sean del mismo tipo , no pueden ser asignadas ó comparadas la una con la otra , en forma directa , sino asignando ó comparandolas miembro a miembro. Esto se vé claramente explicitado en las líneas siguientes , basadas en las declaraciones anteriores: fin_recta = inicio_recta ; /* ERROR */
if( fin_recta >>= inicio_recta ); /* ERROR */
fin_recta.eje_x = inicio_recta.eje_x ; /* FORMA CORRECTA DE ASIGNAR */
fin_recta.eje_y = inicio_recta.eje_y ; /* UNA ESTRUCTURA A OTRA */
fin_recta.eje_z = inicio_recta.eje_z ; if( (fin_recta.eje_x >>= inicio_recta.eje_x) && /* FORMA CORRECTA DE */
(fin_recta.eje_y >>= inicio_recta.eje_y) && /* COMPARAR UNA */
(fin_recta.eje_z >>= inicio_recta.eje_z) ) Las estructuras pueden anidarse , es decir que una ó mas de ellas pueden ser miembro de otra . Las estructuras también pueden ser pasadas a las funciones como parámetros , y ser retornadas por éstas , como resultados . Arrays de Estructuras Cuando hablamos de arrays dijimos que se podían agrupar , para formarlos , cualquier tipo de variables , esto es extensible a las estructuras y podemos entonces agruparlas ordenadamente , como elementos de un array . Veamos un ejemplo : typedef struct { char material[50] ; int existencia ; double costo_unitario ; } Item ; Item stock[100] ; Hemos definido aquí un array de 100 elementos , donde cada uno de ellos es una estructura del tipo Item compuesta por tres variables , un int , un double y un string ó array de 50 caracteres. Los arrays de estructuras pueden inicializarse de la manera habitual , así en una definición de stock, podríamos haber escrito:
Item
stock1[100] = { "tornillos" , 120 , .15 , "tuercas" , 200 , .09 ,
"arandelas" , 90 , .01 };
Analicemos un poco las diferencias entre la dos inicializaciones dadas , en
la primera , el array material[] es inicializado como un string , por medio
de las comillas y luego en forma ordenada , se van inicializando cada uno de
los miembros de los elementos del array stock1[] , en la segunda se ha
preferido dar valores individuales a cada uno de los elementos del array
material , por lo que es necesario encerrarlos entre llaves . longitud_base_de_datos = sizeof( stock1 ) ; longitud_de_dato = sizeof( Item ); cantidad_de_datos = sizeof( stock1 ) / sizeof( Item ); Con la primera calculamos el tamaño necesario de memoria para albergar a todos datos, en la segunda la longitud de un sólo elemento ( record ) y por supuesto dividiendo ambas , se obtiene la cantidad de records. Uniones
Las
uniones son a primera vista, entidades muy similares a las estructuras,
están formadas por un número cualquiera de miembros, al igual que aquellas,
pero en éste caso no existen simultaneamente todos los miembros, y sólo uno
de ellos tendrá un valor válido.
|
|||
|
Descargar gratis los programas y compiladores necesarios para aprender a programar |
|||
|
¿Buscas algo? |
|||
|
|
|||
|
|
|||
|
|
|||