Sindicatos en c

Sindicatos en c

"Al igual que las estructuras, los sindicatos también son tipos de datos definidos por el usuario, pero a diferencia de las estructuras, los miembros de la Unión comparten la misma ubicación de memoria, y no tienen diferentes ubicaciones de memoria. Si declaramos dos variables en una estructura y luego verificamos su dirección, veremos que ambas tienen diferentes direcciones, lo que significa que los miembros de una estructura obtienen diferentes ubicaciones de memoria. En lugar de eso, declaramos las mismas dos variables en una unión y verificamos sus direcciones; Se observará que sus dos direcciones son las mismas, lo que demuestra que ambas constantes comparten la misma ubicación de memoria. En el caso de la estructura, un entero tomará cuatro bloques, pero en una unión, tanto el entero como el carácter compartirán el mismo bloque de memoria.

Una cosa a tener en cuenta es que en un sindicato, los miembros compartirán la misma ubicación de la memoria, lo que significa que si se realizan cambios en un miembro, también se reflejarán en los otros miembros de la Unión. El tamaño del sindicato se toma de acuerdo con el tamaño del mejor miembro de un sindicato. Se puede acceder a los miembros del sindicato a través de punteros utilizando el operador (->). Si queremos almacenar información sobre múltiples objetos como libros y tiendas, tendremos que hacer dos estructuras para cada uno de ellos. Desperdiciará mucha memoria. Para ese propósito, se usan sindicatos. Los sindicatos pueden guardar información en varios objetos."

Sintaxis

La sintaxis para declarar una unión es la siguiente:

La sintaxis para los sindicatos y la estructura es casi la misma. La diferencia entre la unión y la estructura es que usamos el sindicato de palabras clave en lugar de struct para declarar sindicatos. En la sección Variables, podemos ver que hemos declarado múltiples variables de diferentes tipos de datos. Esto es lo mismo que las estructuras, pero en las estructuras, esas variables pueden estar relacionadas con un solo objeto, como el libro o un estudiante o una clase, etc. Pero en los sindicatos, podemos declarar variables relevantes para más de un solo objeto. Por ejemplo, podemos declarar la longitud de una mesa y también el título del libro sobre la mesa.

Ejemplo 1

En este ejemplo, hemos creado una unión y le hemos dado el nombre "test_union". En el bloque de variables, hemos declarado dos variables como miembros de nuestro sindicato. Entero "x" y personaje "y". Con el soporte de cierre, hay una variable de unión de tipo "test_union."También podemos declarar una variable de tipo de unión lo mismo que en las estructuras. Con la ayuda de "Variable1", podemos acceder a los miembros de nuestro sindicato. Dentro de la función Main (), mediante el uso del operador DOT, podemos acceder a las variables declaradas en la Unión. Aquí estamos asignando el valor "75" a "x."Tenga en cuenta que no hemos asignado ningún valor a nuestra variable" Y ".

#incluir
Union Test_union

int x;
char y;
variable1;
int main ()

variable1.x = 75;
printf ("x = %d \ n", variable1.X);
printf ("y = %c \ n", variable1.y);
regresar 0;

Después de ejecutar nuestro código, obtendremos la salida que se muestra en la figura a continuación. Imprimimos "X" y su valor de la misma manera; Imprimimos "Y" y su valor contra él. Lo que debe ser notificado es que no asignamos ningún valor a Y. En nuestra salida, podemos ver que el compilador ha impreso "x" y un valor de "75" en su contra. Pero contra "Y", ha impreso "K."Tal vez se pregunte por qué tenemos esta capital" K "como salida para" y."Valor" 75 "para" X "no es un problema. Pero "y" es un personaje en el que el compilador imprimió su valor incluso cuando pasamos un número a "x."

Esto se debe a que, como discutimos anteriormente, el mismo bloque de memoria es compartido por los miembros que están agrupados en un sindicato. Declaramos "variable1" para nuestra unión y aprobamos el valor utilizando esa variable. Variable1 asignó el valor 75 a todos los miembros de la unión. Int tomó ese valor como un número e imprimió el mismo valor. Pero el personaje tomó ese valor como código ASCII y convirtió ese código ASCII en el carácter en su contra. El código ASCII para el capital "K" es "75", por lo que reemplazó "75" con "K."Este es todo el proceso de sindicato asignando el mismo bloque de memoria a las variables en él.

Ejemplo 2

En este caso, descubriremos cómo el sindicato utiliza la memoria. Para ese propósito, hemos declarado un sindicato como ejemplo_union. En Ejemplo_union, hemos declarado cuatro constantes y cada una con diferentes tipos de datos. Hemos declarado int var1, char Var2, Double Var3 y Float Var4 como miembros de nuestro sindicato. En el método principal, hemos impreso una declaración con la función sizeOf () en él. La función sizeof () es una función predeterminada en el idioma C que obtiene el tamaño de cualquier objeto en nuestro código. Lo hemos aprobado el nombre de nuestro sindicato porque queremos obtener el tamaño que nuestra unión ha ocupado.

#incluir
Ejemplo de sindicato_union

int var1;
char var2;
doble var3;
flotante var4;
;
int main ()

printf ("%ld \ n", sizeOf (union ejemplo_union));
regresar 0;

Esta es la salida después de la compilación de nuestro código. Obtendremos la salida de 8. En mi sistema, el tamaño del entero es de 4 bytes, el tamaño del carácter es de 1 byte, el tamaño de un doble es 8 bytes y el tamaño de un flotador es nuevamente 4 bytes. En nuestro caso, el tamaño de un doble es 8, que es el más grande de todos los tamaños, por lo que el compilador ha asignado el tamaño 8 a nuestra unión. Ahora podemos comprender mejor que el tamaño de la variable más alta se asigna a todos los tipos de datos, y el compilador no utiliza la suma de sus tamaños como en el caso de la estructura. Es por eso que obtendremos el resultado 8 como nuestra salida.

Conclusión

En esta guía, discutimos los sindicatos en el lenguaje C. Solo para comprender el concepto de sindicatos, se puede decir que los sindicatos son casi lo mismo que las estructuras. Pero la principal diferencia es la asignación de memoria. Es muy efectivo al escribir código complejo porque, en ese momento, un programador se centra en la eficiencia del código. Un buen programador siempre está tratando de ocupar la menor memoria del sistema por su código; Los sindicatos los ayudan a hacerlo. Entregamos todo lo posible para ayudarlo a comprender los sindicatos implementando y explicando ejemplos. Al final del tema, podemos decir que usar sindicatos es un buen enfoque para manejar múltiples registros, así como escribir código optimizado y ajustado por el rendimiento. También ayudará al codificador a optimizar el código para un mejor rendimiento.