TEMA 8. ESTRUCTURAS Y UNIONES.

Documentos relacionados
TEMA 7. ARRAYS (LISTAS Y TABLAS).

Índice. Estructuras de datos en Memoria Principal. Vectores. Matrices. Cadenas de caracteres. Estructuras. Estructuras de datos en Memoria Externa

Una función es un miniprograma dentro de un programa. Las funciones contienen varias

Definición de estructuras. Estructuras, uniones y enumeraciones. Declaración. Definición y declaración. (struct, union y enum)

Lógica: Algoritmo: Archivo: Base de datos: Bit:

ESTRUCTURAS. Struct Identificador_ tipo_estructura { Tipo miembro_1; /*Declaración de los miembros*/

Tipos de Datos Estructurados

Elementos de un programa en C

Tema 16: Tipos de datos estructurados en lenguaje C

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Estructuras y Uniones

PUNTEROS (APUNTADORES)

Tema 10: Arreglos estáticos en C

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

TEMA 3. OPERADORES Y EXPRESIONES.

Apuntadores en C y C++

Informática Ingeniería en Electrónica y Automática Industrial

Algoritmo, Estructuras y Programación II Ing. Marglorie Colina

Tema 6: Clases. Índice

Programación estructurada (Introducción a lenguaje C)

PUNTEROS (Apuntadores)

Tema 14: Arreglos estáticos en C

Algoritmos y Programación I

Programación. Test Autoevaluación Tema 6

TEMA 02 TIPOS, OPERADORES Y EXPRESIONES

Universidad del Papaloapan

Una expresión es una combinación de uno o más operandos y operadores para obtener un resultado.

Tema 13: Apuntadores en C

Programación I Unidad III. Tema: Tipos, estructuras y uniones

El lenguaje C. 1. Estructuras. Principios de Programación Definicion de estructuras

Descripción de un Programa

Tipos de datos y Operadores Básicos

4. Estructuras (registros) Programación II, FCFM, BUAP

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL

Unidad IV Arreglos y estructuras. M.C. Juan Carlos Olivares Rojas

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

ESTRUCTURA DE DATOS. Memoria estática Memoria dinámica Tipo puntero Declaración de punteros Gestión de memoria dinámica Resumen ejemplo

Tipos de Datos Recursivos

Análisis semántico. Análisis semántico. Índice (I)

Laboratorio de Arquitectura de Redes. Entrada y salida estándar

Punteros. Programación en C 1

XDR: Estándar de Representación Externa de Datos

Tipos Recursivos de Datos

Programación En Lenguaje C

Informática Ingeniería en Electrónica y Automática Industrial

Laboratorio de Arquitectura de Redes. Datos en lenguaje C

Manual de referencia de C++ Parte IV Variables Punteros. Preparado por Prof. Luis A. Ortiz Ortiz

XDR (External Data Representation) Tipos y codificación. Universidad de Oviedo / Dpto. de Informática

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

Operadores y Expresiones

Unidad 2: Estructuras de Datos estáticas y dinámicas.

UNIVERSIDAD MODULAR ABIERTA FACULTAD DE CIENCIAS ECONOMICAS

Programación. Test Autoevaluación Tema 3

Este material es de uso exclusivo para estudio, los textos fueron tomados textualmente de varios libros por lo que está prohibida su impresión y

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica

Algoritmos y estructuras de datos

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

Lenguaje C, tercer bloque: Funciones

Academia de computación de IE, ICA e ISISA. Unidad didáctica Programación Orientada a Objetos

Sintaxis de los aspectos generales de un lenguaje de programación

Estructura de Datos ARREGLOS

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Estructuras Dinámicas

Sintaxis de C Ing. Jose Maria Sola Dr. Oscar Ricardo Bruno

Unidad V. Ya veremos qué poner en "algunas_palabras" y "algo_más", por ahora sigamos un poco más.

Para crear un arreglo de cualquier tipo de elementos la sintaxis es:

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

1 Introducción a los algoritmos y a la programación de computadoras... 1

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Cadenas de caracteres

Tema 05: Elementos de un programa en C

APELLIDOS NOMBRE GRUPO CALIFICACIÓN FECHA

Laboratorio de Arquitectura de Redes. Introducción al lenguaje C

Transcripción:

TEMA 8. ESTRUCTURAS Y UNIONES. Este capítulo examina estructuras, uniones, enumeraciones y s definidos por el usuario que permite a un programador crear nuevos s de datos. La capacidad para crear nuevos s es una característica importante y potente de C y libera a un programador de restringirse al uso de los s ofrecidos por el lenguaje. Una estructura contiene múltiples variables, que pueden ser de s diferentes. La estructura es importante para la creación de programas potentes, tales como bases de datos u otras aplicaciones que requieran grandes cantidades de datos. Por otra parte, se analizará el concepto de unión, otro de dato no tan importante como los arrays y estructuras, pero sí necesarias en algunos casos. Un de dato enumerado es una colección de miembros con nombre que tienen valores enteros equivalentes. Un typedef es de hecho no un nuevo de dato sino simplemente un sinónimo de un existente. 8.1. ESTRUCTURAS Una estructura es una colección de uno o más s de elementos denominados miembros, cada uno de los cuales puede ser un de dato diferente. Una estructura puede contener cualquier número de miembros, cada uno de los cuales tiene un nombre único, denominado nombre del miembro. Una estructura es un de dato definido por el usuario, que se debe declarar antes de que se pueda utilizar. El formato de la declaración es: struct <nombre de la estructura> < de dato miembro1> <nombre miembro1> < de dato miembro2> <nombre miembro2>... < de dato miembron> <nombre miembron> Al igual que a los s de datos enumerados, a una estructura se accede utilizando una variable o variables que se deben definir después de la declaración de la estructura. Del Pág. 1/7 I.E.S. Ilíberis Atarfe 03/04

mismo modo que sucede en otras situaciones, en C existen dos conceptos similares a considerar, declaración y definición. Una declaración especifica simplemente el nombre y el formato de la estructura de datos, pero no reserva almacenamiento en memoria; la declaración especifica un nuevo de dato: struct <nombre_estructura>. Por consiguiente, cada definición de variable para una estructura dada crea un área en memoria en donde los datos se almacenan de acuerdo al formato estructurado declarado. Las variables de estructuras se pueden definir de dos formas: (1) listándolas inmediatamente después de la llave de cierre de la declaración de la estructura, o (2) listando el de la estructura creado seguida por las variables correspondientes en cualquier lugar del programa antes de utilizarlas. Se puede asignar una estructura a otra. Se puede inicializar una estructura de dos formas. Se puede inicializar una estructura dentro de la sección de código de tu programa, o bien se puede inicializar la estructura como parte de la definición. Cuando se inicializa una estructura como parte de la definición, se especifican los valores iniciales, entre llaves, después de la definición de variables estructura. El formato general en este caso es: struct <> <nombre variable estructura> = valor miembro1, valor miembro2, valor miembron El operador sizeof se puede aplicar para determinar el tamaño que ocupa en memoria una estructura. Cuando se accede a una estructura, o bien se almacena información en la estructura o se recupera la información de la estructura. Se puede acceder a los miembros de una estructura de una de estas dos formas: (1) utilizando el operador punto (.), o bien (2) utilizando el operador flecha ->. La asignación de datos a los miembros de una variable estructura se hace mediante el operador punto. La sintaxis en C es: <nombre variable estructura>. <nombre miembro> = datos; Pág. 2/7 I.E.S. Ilíberis Atarfe 03/04

El operador punto proporciona el camino directo al miembro correspondiente. Los datos que se almacenan en un miembro dado deben ser del mismo que el declarado para ese miembro. El operador puntero, ->, sirve para acceder a los datos de la estructura a partir de un puntero. Para utilizar este operador se debe definir primero una variable puntero para apuntar a la estructura (tema 9). A continuación, se utiliza simplemente el operador puntero para apuntar a un miembro dado. La asignación de datos a estructuras utilizando el operador puntero tiene el formato: <puntero estructura> -> <nombre miembro> = datos; Previamente habría que crear espacio de almacenamiento en memoria; por ejemplo, con la función malloc( ) (tema 10). Si se desea introducir la información en la estructura basta con acceder a los miembros de la estructura con el operador punto o el operador flecha (puntero). Se puede introducir la información desde el teclado o desde un archivo, o asignar valores calculados. Se recupera información de una estructura utilizando el operador de asignación o una sentencia de salida (printf ( ), puts ( )... ). Igual que antes, se puede emplear el operador punto o el operador flecha (puntero). El formato general toma uno de estos formatos: 1. <nombre variable> = <nombre variable estructura>.<nombre miembro>; o bien <nombre variable> = <puntero de estructura> -> <nombre miembro>; 2. para salida: printf(,<nombre variable estructura>.<nombre miembro>); o bien printf(,<puntero de estructura>-> <nombre miembro>); Pág. 3/7 I.E.S. Ilíberis Atarfe 03/04

Una estructura puede contener otras estructuras llamadas estructuras anidadas. Las estructuras anidadas ahorran tiempo en la escritura de programas que utilizan estructuras similares. Se han de definir los miembros comunes sólo una vez en su propia estructura y a continuación utilizar esa estructura como un miembro de otra estructura. El acceso a miembros dato de estructuras anidadas requiere el uso de múltiples operadores punto. Las estructuras se pueden anidar a cualquier grado. También es posible inicializar estructuras anidadas en la definición. Se puede crear un array de estructuras tal como se crea un array de otros s. Muchos programadores de C utilizan arrays de estructuras como un método para almacenar datos en un archivo de disco. Se pueden introducir y calcular tus datos de disco en arrays de estructuras y a continuación almacenar esas estructuras en memoria. Los arrays de estructuras proporcionan también un medio de guardar datos que se leen del disco. Los miembros de las estructuras pueden ser asimismo arrays. C permite pasar estructuras a funciones, bien por valor o bien por referencia, utilizando el operador &. Si la estructura es grande, el tiempo necesario para copiar un parámetro struct a la pila puede ser prohibitivo. En tales casos, se debe considerar el método de pasar la dirección de la estructura. 8.2. UNIONES Las uniones son similares a las estructuras en cuanto agrupan a una serie de variables, pero la forma de almacenamiento es diferente y por consiguiente tiene efectos diferentes. Una estructura (struct) permite almacenar variables relacionadas juntas y almacenadas en posiciones contiguas en memoria. Las uniones, declaradas con la palabra reservada union, almacenan también miembros múltiples en un paquete; sin embargo, en lugar de situar sus miembros unos detrás de otros, en una unión, todos los miembros se solapan entre sí en la misma posición. El tamaño ocupado por una unión se determina así: es analizado el tamaño de cada variable de la unión; el mayor tamaño de variable será el tamaño de la unión. La sintaxis de una unión es la siguiente: union nombre 1 miembro1; Pág. 4/7 I.E.S. Ilíberis Atarfe 03/04

2 miembto2;... La cantidad de memoria reservada para una unión es igual a la anchura de la variable más grande. En el union, cada uno de los miembros dato comparten memoria con los otros miembros de la unión. Una razón para utilizar una unión es ahorrar memoria. En muchos programas se deben tener varias variables, pero no necesitan utilizarse todas al mismo tiempo. Para referirse a los miembros de una unión, se utiliza el operador punto (.), o bien el operador -> si se hace desde un puntero a unión. 8.3. ENUMERACIONES Una enumeración es un definido por el usuario con constantes de nombre de entero. En la declaración de un enum se escribe una lista de identificadores que internamente se asocian con las constantes enteras 0, 1, 2.... Formato 1. enum enumerador1, enumerador2,... enumeradorn. 2. enum nombre enumerador1, enumerador2,... enumeradorn. En la declaración del enum pueden asociarse a los identificadores valores constantes en vez de la asociación que por defecto se hace (0, 1, 2... ). Para ello se utiliza este formato: 3. enum nombre enumerador1 = expresión_constante1, enumerador2 = expresión_constante2, Pág. 5/7 I.E.S. Ilíberis Atarfe 03/04

enumeradorn = exprsesión_constanten El tamaño en bytes de una estructura, de una unión o de un enumerado se puede determinar con el operador sizeof. 8.4. TYPEDEF Un typedef permite a un programador crear un sinónimo de un de dato definido por el usuario o de un ya existente. 8.5. CAMPOS DE BIT El lenguaje C permite realizar operaciones con los bits de una palabra. Ya se han estudiado los operadores de manejo de bits:», «,.... Con los campos de bit, C permite acceder a un número de bits de una palabra entera. Un campo de bits es un conjunto de bits adyacentes dentro de una palabra entera. La sintaxis para declarar campos de bits se basa en la declaración de estructuras. El formato general es: struct: identificador_campo nombre1: longitud1; nombre2: longitud2; nombre3: longitud3;... nombren: longitudn; longitud ha de ser entero, int; generalmente unsigned int es el número de bits consecutivos que se toman. Pág. 6/7 I.E.S. Ilíberis Atarfe 03/04

Al declarar campos de bits, la suma de los bits declarados puede exceder el tamaño de un entero; en ese caso se emplea la siguiente posición de almacenamiento entero. No está permitido que un campo de bits solape los límites entre dos int. Al declarar una estructura puede haber miembros que sean variables y otros campos de bits. Los campos de bits se utilizan para rutinas de encriptación de datos y fundamentalmente para ciertas interfaces de dispositivos externos. Los campos de bits tienen ciertas restricciones. Así, no se puede tomar la dirección de una variable campo de bits; no puede haber arrays de campos de bits; no se puede solapar fronteras de int. Depende del procesador el que los campos de bits se alineen de izquierda a derecha o de derecha a izquierda (conviene hacer una comprobación para cada procesador, utilizando para ello una un on con variable entera y campos de bits). Pág. 7/7 I.E.S. Ilíberis Atarfe 03/04