Introducción a C Union

Union es un tipo de datos definido por el usuario en c, permite almacenar diferentes elementos de datos de diferentes tipos de datos para almacenarlos en la misma ubicación de memoria. Proporciona una forma eficiente de utilizar la memoria, ya que solo se puede acceder a un miembro de una unión en un momento determinado. Por lo tanto, el tamaño de una unión en cualquier momento sería igual al tamaño de su elemento más grande. Aunque la unión es como una estructura, la principal diferencia es que en una estructura se asigna una memoria separada para cada miembro de la estructura, mientras que en la unión es una memoria compartida que es equivalente al tamaño del miembro más grande.

Sintaxis:

Una unión se puede definir a continuación.

union UnionName
(
UMember1;
UMember2;
UMember3;
) UnionReference;

Se puede acceder a los miembros de C Union utilizando la referencia 'UnionReference'. Unión es una palabra clave.

Ejemplo de estructura y unión en la asignación de memoria:

Demostremos la diferencia entre struct y union en la asignación de memoria.

Código:

#include
struct samp_structure
(
char name1(30);
int e_id;
float e_slry;
char name2(60);
)s;
union s_union
(
char name1(30);
int e_id;
float saly;
)u;
int main()
(
printf("size of structure :%ld bytes \n", sizeof(s));
printf("size of union : %ld bytes\n", sizeof(u));
return 0;
)

Salida:

Ejemplos de unión C

Veamos la implementación de C Union con la ayuda de los ejemplos mencionados a continuación:

Ejemplo 1

Este es el ejemplo para definir una unión C y acceder a sus miembros.

Código:

#include
#include
union test (
int tint;
float tf;
char tstr(20);
);
int main( ) (
union test t;
t.tint = 100;
printf( "record.i : %d\n", t.tint);
t.tf= 200.5;
printf( "record.f : %f\n", t.tf);
strcpy( t.tstr, "Test");
printf( "record.str : %s\n", t.tstr);
return 0;
)

Salida :

Ejemplo # 2

A continuación se muestra el mismo código que el anterior, excepto que las declaraciones de impresión se han reorganizado.

Código:

#include
#include
union test (
int tint;
float tf;
char tstr(20);
);
int main( ) (
union test t;
t.tint = 100;
t.tf = 200.5;
strcpy( t.tstr, "Test");
printf( "record.i : %d\n", t.tint);
printf( "record.f : %f\n", t.tf);
printf( "record.str : %s\n", t.tstr);
return 0;
)

Salida:

Si observa la salida con cuidado, puede ver que se han asignado valores basura para int y float porque la cadena se le asignó la memoria, por fin, es decir, dado que los miembros comparten la memoria en una unión, el miembro cuyo valor está actualmente almacenado tener acceso a la memoria.

Ejemplo # 3

La unión anónima es una unión que no tiene nombre, por lo tanto, se puede usar dentro de cualquier estructura o unión anidada. Se puede acceder directamente a los miembros del sindicato anónimo dentro del alcance de su definición. Del mismo modo, la estructura anónima se puede utilizar dentro de una unión anónima.

Sintaxis de unión anónima y estructura de la siguiente manera:

// Anonymous union example
union
(
char anoUChar;
int anoUNum;
);
// Anonymous structure example
struct
(
char anoSChar;
int anoSNum;
);

Ejemplo de unión de estructura anónima dentro de una estructura:

#include
struct testscope
(
// Anonymous union
union
(
char testChar;
int testNum;
int testNum2;
);
);
int main()
(
struct testscope ts;
ts.testNum = 65;
// Note that members of union are accessed directly
printf("testchar = %c, testnum = %d, testnum2 = %d", ts.testChar, ts.testNum, ts.testNum2);
return 0;
)

Salida:

Al testchar se le ha asignado el valor 'A' porque el valor reciente en la memoria de unión es 65 que se asignó a testNum, por lo tanto, se imprime el carácter ASCII correspondiente.

Nota: Se accede directamente a los miembros del sindicato.

Ejemplo de estructura anónima dentro de una unión:

#include
union testscope
(
// Anonymous union
struct
(
char testChar;
int testNum;
int testNum2;
);
);
int main()
(
union testscope ts;
ts.testNum = 65;
ts.testChar='V';
//Note: The members of struct are accessed directly
printf("testchar = %c, testnum = %d, testnum2 = %d", ts.testChar, ts.testNum, ts.testNum2);
return 0;
)

Salida:

Conclusión

Por lo tanto, el sindicato ayuda a administrar la memoria de manera eficiente. El inconveniente de la unión es que solo el último valor ingresado a la unión solo estará disponible. Debe usarse cuando los miembros del sindicato no necesitan estar disponibles para acceder al mismo tiempo.

Artículos recomendados

Esta es una guía de C Union. Aquí discutimos la introducción, la sintaxis y los diferentes ejemplos de c union con implementación de código. También puede consultar los siguientes artículos para obtener más información.

  1. C Palabras clave
  2. Arreglos en programación en C
  3. Programa Palindrome en C ++
  4. Clases de almacenamiento C