Diferencia entre estructura y unión

Autor: Laura McKinney
Fecha De Creación: 1 Abril 2021
Fecha De Actualización: 9 Mayo 2024
Anonim
Diferencia entre estructura y unión - Tecnología
Diferencia entre estructura y unión - Tecnología

Contenido


C ++ permite las cinco formas que proporciona el lenguaje C para crear datos personalizados. Esas cinco formas son "estructura", "campo de bits", "unión", "enumeración", "typedef". En el siguiente artículo vamos a estudiar la diferencia entre estructura y unión. La estructura y la unión son los tipos de datos del contenedor que pueden contener datos de cualquier "tipo". La principal diferencia que distingue la estructura y la unión es que la estructura tiene una ubicación de memoria separada para cada uno de sus miembros, mientras que los miembros de una unión comparten la misma ubicación de memoria.

Comprendamos la diferencia entre estructura y unión, junto con un cuadro de comparación.

  1. Cuadro comparativo
  2. Definición
  3. Diferencias clave
  4. Similitudes
  5. Conclusión

Cuadro comparativo

Bases de comparaciónEstructuraUnión
BASICLa ubicación de memoria separada se asigna a cada miembro de la estructura.Todos los miembros del sindicato comparten la misma ubicación de memoria.
Declaraciónstruct struct_name {
tipo element1;
tipo element2;
.
.
} variable1, variable2, ...;
union u_name {
tipo element1;
tipo element2;
.
.
} variable1, variable2, ...;
palabra claveestructuraUnión
tamañoTamaño de la estructura = suma del tamaño de todos los miembros de datos.Tamaño de la Unión = tamaño de los miembros más grandes.
Valor de la tiendaAlmacena valores distintos para todos los miembros.Almacena el mismo valor para todos los miembros.
A la vezUna estructura almacena múltiples valores, de los diferentes miembros, de la estructura.Un sindicato almacena un valor único a la vez para todos los miembros.
Forma de verProporcione una única forma de ver cada ubicación de memoria.Proporciona múltiples formas de ver la misma ubicación de memoria.
Característica anónimaSin función anónima.Se puede declarar la unión anónima.

Definición de estructura

La estructura es una colección de variables de diferentes tipos de datos, que se denominan con un nombre común. Las variables en una estructura se llaman "miembros". Por defecto, todos los miembros de una estructura son "públicos". Cuando declara una estructura, crea una plantilla, que puede usarse para crear objetos de estructura, compartiendo la misma organización de miembros de datos y funciones de miembros. La declaración de la estructura siempre está precedida por la palabra clave "struct", que le dice al compilador que se ha declarado una estructura. Tomemos un ejemplo.


Tomemos un ejemplo.

struct employee {nombre de cadena; string nombre_empresa; ciudad de cuerdas; } emp1, emp2;

Aquí, declaramos una estructura para almacenar la información de los empleados. La declaración termina con un punto y coma, ya que la declaración de estructura es una declaración y, en C ++, la declaración termina con un punto y coma.

El nombre dado a una estructura define un "tipo" (en el ejemplo anterior, el nombre de la estructura es "empleado"). Las variables de estos tipos podrían crearse, como anteriormente, creamos dos variables 'emp1' y 'emp2' del tipo "empleado". En el ejemplo anterior, creamos una variable de "estructura" justo después de la declaración; alternativamente, podría crearse por separado.

struct employee emp1, emp2; // la palabra clave struct no es obligatoria.

Los miembros de una variable de estructura se pueden inicializar o se puede acceder mediante el uso del operador punto (.).


emp1.name = "ashok";

La información contenida en una variable de estructura se puede asignar a otra variable de estructura del mismo tipo de la siguiente manera.

emp1.name = "ashok"; emp1.company_name = "Teckpix"; emp1.city = "Delhi"; emp2 = emp1; // asignando valores del miembro de emp1 a emp2. cout <

Aquí, asignamos la variable de estructura 'emp1' a 'emp2' así que 'emp1' copia todo el valor de sus miembros al miembro correspondiente de 'epm2'.

El miembro de la variable de estructura se puede pasar a la función.

funct (emp1.city);

La variable de estructura completa se puede pasar a la función, tanto por los métodos llamada por valor como por llamada.

funt (emp1); // función de llamada por llamada por método de valor. . . void funct (struct employee emp) {// recepción de valores de miembros de emp1. cout <

Aquí, el cambio en el valor de un miembro de la variable de estructura no se reflejará fuera de la función, ya que una variable se pasa por método call by value. Ahora hagamos lo mismo llamando por método de referencia.

funt (& emp1); // función de llamada por llamada por método de referencia. . . void funct (struct employee * emp) {// recepción de la dirección de emp1. emp-> city = "Nur"; // cambia el valor del miembro (ciudad) de la variable de estructura emp1. . }

Aquí, la variable de estructura se pasa por referencia, por lo que el cambio en el valor de los miembros de la variable de estructura también se refleja fuera de la función.

srtuct empleado * emp; // descalcificar el puntero de estructura de tipo employee. emp = & emp1; // asignando la dirección de emp1 al puntero. emp-> city // puntero accediendo a la ciudad miembro de emp1.

El puntero a la estructura también se puede crear; contiene la dirección de la estructura variable.

En la estructura, la inicialización agregada se permite cuando la definición de la estructura no contiene ningún constructor definido por el usuario o funciones virtuales o clase base o campo privado o protegido.

int main () {struct epm3 = {"Anil", "Teckpix", "Nur"}; } // Posible ya que la estructura del empleado no contiene ninguna de las cosas mencionadas anteriormente.

Definición de unión

Una unión es una ubicación de memoria compartida por dos o más tipos diferentes de variables declaradas bajo un solo tipo de unión. La palabra clave utilizada para declarar una unión es "unión". En C ++, una unión puede contener funciones miembro y variables. Por defecto, todos los miembros del sindicato son "públicos". La declaración de la "unión" es similar a la declaración de la estructura.

union u_type {int x, char c; flotador f; } u1, u2;

Aquí, habíamos declarado una unión llamada u_type. Los miembros de u_type son "x" de tipo entero, "c" de tipo de caracteres y "f" de tipo flotante. También creamos las variables de unión 'u1' y 'u2', del tipo 'u_type', justo después de la declaración de una unión. También podemos declarar la variable de unión por separado de la declaración de una unión.

int main () {union u_type u1, u2; // La unión de palabras clave no es obligatoria en C ++. }

El acceso de los miembros de la unión se puede hacer utilizando el operador de punto (.), Precedido por la variable de unión y seguido del miembro de esa variable.

u1.x = 10;

Al igual que las estructuras, la inicialización agregada no es posible en una unión. Como sabemos, la unión comparte la misma ubicación de memoria para todos sus miembros a la vez, solo se inicializa una variable y todas las variables se actualizan automáticamente con el valor inicializado.

u1.x = 10; cout <

Si intenta cambiar el valor de cualquier miembro de "u1". El otro miembro se actualizará automáticamente a ese valor.

u1.c = 65; cout <

El espacio asignado a la unión es igual al tamaño del miembro más grande de la unión. Como el byte asignado a "char" es de 1 byte, "int" es de 4 byte y "float" es de 4 bytes, por lo que el tamaño más grande es de 4 byte. Entonces, la memoria asignada a "u1" y "u2" es de 4 bytes.

int main () {int size_1 = sizeof (u1); // 4 int size_2 = sizeof (u2); // 4

El puntero a la unión se puede crear igual que en la estructura. El puntero contiene la dirección de la unión.

union u_type * un; un = & u1; cout <X; // 10

Al igual que la estructura, la unión también se puede pasar a las funciones por ambos métodos, es decir, llamada por valor y llamada por referencia.

funct (u1); // función de llamada por llamada por método de valor. . . void funct (union u_type un) {// recibiendo el valor del miembro de u1. cout <

Ahora, llamemos a la función usando llamar por método de referencia.

funct (& u1); // función de llamada por llamada por método de referencia. . . void funct (union u_type un) {// recibiendo la dirección de u1. un-> x = 20. }

Hay un tipo especial de unión en C ++ llamada Unión Anónima ”. La unión anónima no puede tener el nombre del tipo y no se puede crear ninguna variable de dicha unión. Es solo para decirle al compilador que sus variables miembro deben compartir la misma ubicación. La variable de una unión anónima se puede referir sin el operador de punto (.) Normal.

int main () {union {// define una unión anónima sin el nombre del tipo. int x, char c; flotador f; }; x = 10; // refirió la variable de unión sin operador de punto cout <

En la unión anónima no se permiten funciones de miembro, no puede contener datos privados o protegidos, y la unión anónima global debe especificarse como "estática".

Los puntos a recordar para la declaración sindical normal.

  • La definición de una unión también puede contener constructor y destructor.
  • La unión proporciona múltiples formas de ver la misma ubicación de memoria.
  • La unión no puede heredar la clase de ningún tipo.
  • La unión no puede ser una clase base.
  • La unión no puede tener la función miembro virtual.
  • La unión no puede tener una variable estática.
  1. La Estructura usa diferentes ubicaciones de memoria para diferentes miembros. Por lo tanto, el valor distinto se puede asignar a todos los miembros. Pero, el sindicato asigna la misma ubicación de memoria a todos los miembros. Por lo tanto, se puede asignar un único valor a todos los miembros.
  2. La estructura tiene una ubicación de memoria diferente para todos los miembros; por lo tanto, puede contener múltiples valores a la vez y, como sabemos, la unión comparte la misma ubicación de memoria para todos los miembros, por lo tanto, puede almacenar un solo valor a la vez.
  3. En general, el tamaño total de la estructura es mayor que el tamaño total de la unión porque el tamaño de una estructura es la suma del tamaño de todos los miembros de las estructuras y el tamaño de la unión es el tamaño del miembro de la unión. tipo más grande
  4. La estructura proporciona una vista única de cada ubicación, mientras que la unión proporciona las vistas múltiples de una sola ubicación.
  5. Puede declarar una unión anónima pero no una estructura anónima.

Similitudes:

  • Tanto la estructura como la unión tienen la misma forma de declararse, crear variables y la misma forma de acceder a los miembros de las variables.
  • Tanto la estructura como la unión pueden pasarse a una función mediante los métodos llamada por valor y llamada por referencia.
  • Tanto la estructura como la unión son tipos de datos de contenedor y contienen un objeto de cualquier tipo de datos, incluida otra estructura, unión y matriz como sus miembros.

Conclusión:

Tanto la estructura como la unión son el tipo de datos del contenedor que contiene el miembro de diferentes tipos. Pero las estructuras se usan cuando necesitamos almacenar un valor distinto para todos los miembros en una ubicación de memoria distinta. Las uniones se usan cuando se necesita conversión de tipo.