INTRODUCCIÓN
En el siguiente trabajo de investigación referente a la materia algoritmos y programación se presenta información acerca de una estructura que nos dice son tipos de datos agregados o también podría definirse como un conjunto de variables agrupados un una unidad, en donde la unidad es la estructura de programación C, también información acerca de la definición y como definir una estructura a la hora de programar, así de como inicializar una estructura y las estructuras con funciones.
8.1 Definiciones de estructuras Las estructuras son tipos de datos agregados; es decir, pueden construirse mediante el uso de elementos de varios tipos, incluyendo otros tipos struct. Por ejemplo las siguientes definiciones de estructuras: struct Carta { char *cara; char *palo; }; // fin de struct Carta
La palabra clave struct introduce la definición de la estructura Carta. El identificador Carta es el nom br e de la estr uctur a y se utiliza en C++ para declarar variables de tipo estructura (en C, el nombre del tipo de la estructura anterior es struct Carta). En este ejemplo, el tipo de estructura es Carta. Los datos (y posiblemente las funciones; al igual que con las clases) declarados dentro de las llaves de la definición de la estructura son los miembros de la estructura. Los miembros de la misma estructura deben tener nombres únicos, pero dos estructuras distintas pueden contener miembros del mismo nombre sin conflicto. Cada definición de estructura debe terminar con un signo de punto y coma. La definición de Carta contiene dos miembros de tipo char *: cara y palo. Los miembros de una estructura pueden ser variables de los tipos de datos fundamentales (por ejemplo, int, double, etc.) o agregados, como arreglos, otras estructuras y/o clases. Los miembros de datos en la definición de una estructura pueden ser de muchos tipos de datos. Por ejemplo, una estructura Empleado podría contener miembros de cadenas de caracteres para el primer nombre y el apellido paterno, un miembro int para la edad del empleado, un miembro char que contenga 'M' o 'F' para el género del empleado, un miembro double para el salario por hora del empleado, y así en lo sucesivo. Una estructura no puede contener una instancia de sí misma. Por ejemplo, una variable de estructura Carta no se puede declarar en la definición para la estructura Carta. Sin embargo, un apuntador a una estructura Carta sí se puede incluir. Una estructura que contenga un miembro que seaun apuntador al mismo tipo deestructuraseconocecomo estr uctu ra auto rr eferenciada. La definición de la estructura Carta no reserva espacio en memoria; en vez de ello, crea un nuevo tipo de datos que se utiliza para declarar variables de estructura. Estas variables se declaran de la misma forma que las variables de otros tipos; por ejemplo. Carta unaCarta; Carta mazo[ 52]; Carta *cartaPtr; Declaran a unaCarta como una variable de una estructura de tipo Carta, a mazo como un arreglo con 52 elementos de tipo Carta y a cartaPtr como un apuntador a una estructura Carta.
También se pueden declarar variables de un tipo de estructura dado al colocar una lista separada por comas de los nombres de las variables entre la llave de cierre de la definición de la estructura y el punto y coma que termina la definición de la estructura. Por ejemplo, las declaraciones anteriores podrían haberse incorporado en la definición de la estructura Carta de la siguiente manera: struct Carta { char *cara; char *palo; } unaCarta, mazo[ 52 ], *cartaPtr;
El nombredelaestructura esopcional. Si ladefinición de una estructura no contiene un nombre, las variables de ese tipo de estructura sólo se pueden declarar entre la llave derecha de cierre de la definición de la estructura y el punto y coma que termina esta definición. Las únicas operaciones integradas válidas que se pueden realizar en objetos de estructuras son: asignar un objeto de estructura a otro del mismo tipo, recibir la dirección (&) de un objeto de estructura, acceder a los miembros de un objeto de estructura (de la misma forma que se accede a los miembros de una clase) y utilizar el operador sizeof para determinar el tamaño de una estructura. Al igual que con las clases, la mayoría de los operadores se pueden sobrecargar para trabajar con objetos de un tipo de estructura. Los miembros de las estructuras no se almacenan necesariamente en bytes consecutivos de memoria. Algunas veces hay agujeros en una estructura, debido a que ciertas computadoras almacenan tipos de datos específicos sólo en ciertos límites de memoria, como media palabra, palabra o doble palabra. Una palabra es una unidad estándar de memoria que se utiliza para almacenar datos en una computadora; por lo general dos o cuatro bytes, y comúnmente cuatro bytes en los sistemas populares de 32 bits de la actualidad. Considere la siguiente definición de una estructura, en la que se declaran los objetos estructura ejemplo1 y ejemplo2 de tipo Ejemplo: struct Ejemplo { char c; int i; } ejemplo1, ejemplo2;
Una computadora con palabras de dos bytes podría requerir que cada uno de los miembros de Ejemplo se alineen en un límite de palabra (es decir, al principio de una palabra; esto es dependiente del equipo). Si los miembros se almacenan empezando en límites de palabra, hay un agujero de un byte en el almacenamiento para los objetos de tipo Ejemplo. El valor en el agujero de un byte es indefinido. Si los valores de los miembros de ejemplo1 y ejemplo2 son de hecho iguales, los objetos estructura no son necesariamente iguales, ya que no es probable que los agujeros indefinidos de un byte contengan valores idénticos.
8.2 Inicialización de estructuras Las estructuras se pueden inicializar mediante listas inicializadoras, como con los arreglos. Por ejemplo, la declaración Carta unaCarta = { "Tres", "Corazones" };
Crea la variable Carta llamada unaCarta, inicializa el miembro cara con "Tres" y el miembro palo con "Corazones". Si hay menos inicializadores en la lista que miembros en la estructura, el resto de los miembros se inicializan con sus valores predeterminados. Las variables de estructura declaradasfuera de la definición de una función (es decir, en forma externa) se inicializan con sus valores predeterminados si no se inicializan explícitamente en la declaración externa. Las variables de estructura también se pueden establecer en expresiones de asignación, ya sea asignando una variable de estructura del mismo tipo o asignando valores a los miembros de datos individuales de la estructura.
8.3 Uso de estructuras con funciones Hay dos formas de pasar la información en estructuras a las funciones. Podemos pasar toda la estructura, o pasar los miembros individuales de una estructura. De manera predeterminada, las estructuras se pasan por valor. Las estructuras y sus miembros también se pueden pasar por referencia, ya sea pasando referencias o apuntadores. Para pasar una estructura por referencia, se pasa la dirección del objeto estructura o una referencia al objeto estructura. Los arreglos de estructuras (al igual que los demás arreglos) se pasan por referencia. Para pasar un arreglo por valor, se crea una estructura (o clase) con el arreglo como miembro, y después se pasa un objeto de ese tipo de estructura (o clase) a una función por valor. Como los objetos estructura se pasan por valor, también el miembro arreglo se pasa por valor. La palabra clave typedef proporciona un mecanismo para crear sinónimos (o alias) para los tipos de datos definidos con anterioridad. A menudo los nombres para los tipos de estructuras se definen con typedef para crear nombres de tipos más cortos, simples o legibles. Por ejemplo, la instrucción define el nuevo nombre de tipo CartaPtr como un sinónimo para el tipo Carta*. Al crear un nuevo nombre con typedef no se crea un nuevo tipo; typedef simplemente crea un nuevo nombre de tipo, el cual después se puede utilizar en el programa como alias para un nombre de tipo existente. Escriba con mayúsculas los nombres de typedef para enfatizar que estos nombres son sinónimos para otros nombres de tipos. Se pueden crear sinónimos para los tipos de datos integrados con typedef para que los programas sean más portables. Por ejemplo, un programa puede usar typedef para crear el alias Integer para los enteros de cuatro bytes. Así, Integer puede ser un alias para int en sistemascon enteros de cuatro bytes, y puede ser un alias para long int en sistemascon enteros de dos bytes, en donde los valores long int ocupan cuatro bytes. De esta forma, simplemente declaramos todas las variables enteras de cuatro bytes como de tipo Integer.
CONCLUSIÓN
Las estructuras son colecciones de variables relacionadas (o agregados) bajo un solo nombre. Pueden contener variables de distintos tipos de datos como char, int, float. La palabra struct empieza es la que se utiliza al principio de toda definición de la estructura después entre las llaves de la definición de la estructura se encuentran las declaraciones de sus miembros de la misma estructura los cuales deben tener nombres únicos. Una estructura se puede inicializar mediante una lista inicializadora, colocando después de la variable en la declaración un signo de igual y una lista separada por comas de inicializadores encerrados entre llaves. Una variable de estructura se puede inicializar con una variable de estructura del mismo tipo.