Diferencia entre estructura y unión
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.
- Cuadro comparativo
- Definición
- Diferencias clave
- Similitudes
- Conclusión
Cuadro comparativo
Bases de comparación | Estructura | Unión |
---|---|---|
BASIC | La 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ón | struct struct_name { tipo element1; tipo element2; . . } variable1, variable2, ...; | union u_name { tipo element1; tipo element2; . . } variable1, variable2, ...; |
palabra clave | estructura | Unión |
tamaño | Tamañ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 tienda | Almacena valores distintos para todos los miembros. | Almacena el mismo valor para todos los miembros. |
A la vez | Una 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 ver | Proporcione 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ónima | Sin 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 < 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. 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.
Similitudes:
Conclusión: