Estructuras y uniones en C/C++/Java: sintaxis, declaración y uso de punteros

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 5,47 KB

Estructuras y uniones

Los arreglos son estructuras de datos que contienen un número determinado de elementos del mismo tipo de datos (estructuras de datos homogéneas), como por ejemplo: lista de temperaturas, lista de notas, etc.

Problemática

El problema de los arreglos se limita cuando se requiere un conjunto de elementos de distintos tipos de datos; por ejemplo, cuando se necesita una lista de información de clientes que contenga datos como nombre, edad, dirección, número de cuenta, etc.

Solución

La solución a esta situación es utilizar un tipo de dato registro (que contenga distintos tipos de datos). En algunos lenguajes, como C, C++ o Java, se denominan estructuras. Una estructura se compone de elementos individuales llamados miembros. Cada miembro de una estructura puede contener datos de un tipo diferente al de otros miembros.

En conclusión, una estructura es una colección de uno o más elementos denominados miembros, cada uno de los cuales puede ser de un tipo de datos diferente. Una estructura puede contener cualquier número de miembros. Cada miembro tiene un nombre único, denominado nombre del miembro.

Ejemplo: colección de CDs

Ejemplo de los datos de una colección de CD de música: título, artista, número de canciones, precio y fecha de compra. La estructura contiene cinco miembros, donde cada miembro tiene su propio tipo de dato.

Declaración de una estructura

Declaración: Una estructura es un tipo de dato que el usuario define. Antes de usar una estructura se debe declarar en forma similar a una función. Esta declaración tiene el siguiente formato:

struct NombreEstructura
{
    tipo_dato miembro1;
    tipo_dato miembro2;
    /* … */
};

Por ejemplo, la declaración de la estructura del ejemplo de un CD es:

struct coleccionesCD
{
    char titulo[30];
    char artista[25];
    int num_canciones;
    float precio;
    char fecha_compra[8];
};

Definición de variables de una estructura

Al declarar una estructura de datos, esta especifica un nuevo tipo de dato. 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 estructura se pueden definir de dos maneras:

  1. Listándolas inmediatamente después de la llave de cierre de la declaración de la estructura.
  2. Listando el tipo de la estructura creado seguido por las variables correspondientes en cualquier lugar del programa antes de utilizarlas.

Primera forma:

struct coleccionesCD
{
    char titulo[30];
    char artista[25];
    int num_canciones;
    float precio;
    char fecha_compra[8];
} cd1, cd2, cd3;  /* se definen variables cd1, cd2 y cd3 */

Segunda forma:

struct coleccionesCD cd1, cd2, cd3; /* definición posterior en el programa */

Operador puntero (->) y acceso mediante punteros

El operador puntero -> sirve para acceder a los datos de la estructura a partir de un puntero. Para utilizar este operador se debe crear una variable puntero que apunte a la estructura.

Ejemplo: una estructura llamada estudiante.

struct estudiante
{
    char nombre[41];
    int numEstudiante;
    int anioDeMatricula;
    float nota;
};

struct estudiante *punteroEst;  /* puntero a la estructura */
struct estudiante mejor;         /* variable de tipo estructura */

/* Asignación de la dirección de la variable 'mejor' al puntero */
punteroEst = &mejor;  /* punteroEst ahora tiene la dirección de la variable mejor */

/* Ejemplo de asignación a miembros mediante el puntero */
strcpy(punteroEst->nombre, "Pepe Alondra");
punteroEst->numEstudiante = 3425;
punteroEst->nota = 8.5;

Nota: Antes de acceder a los miembros de una estructura con un puntero y el operador ->, es necesario crear espacio de almacenamiento en memoria; por ejemplo, la dirección de una estructura ya creada (como en el ejemplo: punteroEst = &mejor;).

Estructuras anidadas y paso por valor

Las estructuras se pueden pasar directamente a una función igual que se hace con las variables. Es posible crear estructuras que tengan como miembros otras estructuras. Esto tiene diversas utilidades, por ejemplo contar con estructuras de datos más ordenadas. Las estructuras anidadas ahorran trabajo en la escritura de programas que utilizan estructuras similares: se deben definir los miembros comunes solo una vez en su propia estructura y a continuación utilizar esa estructura como miembro de otra estructura.

Resumen

  • Las estructuras permiten agrupar datos de distintos tipos bajo un mismo nombre.
  • Se declaran con la palabra clave struct y finalizan con un punto y coma (;).
  • Las variables de estructura pueden definirse inmediatamente tras la declaración o más adelante en el programa.
  • El operador -> permite acceder a los miembros de una estructura a través de un puntero.
  • Las estructuras pueden anidarse y pasarse por valor a funciones.

Entradas relacionadas: