Funcionamento de union

Funcionamento de union

por Eron Ferreira de Castro Júnior -
Número de respostas: 1

Boa tarde!

Gostaria de entender mais sobre o funcionamento de union. Eu percebo que ela tem campos tais como uma struct. Porém, diferentemente desta, ela só parece poder ter um campo devidamente preenchido...

Obrigado pela atenção!

 

Em resposta à Eron Ferreira de Castro Júnior

Re: Funcionamento de union

por José Coelho de Pina -

Salve,

Vejam se o exemplo a seguir esclarece a diferença

#include <stdio.h>

typedef struct exemploStruct Estrutura;
struct exemploStruct 
{
    char  c;
    int   i;
    float x;
};


typedef union exemploUnion Uniao;
union exemploUnion 
{
    char  c;
    int   i;
    float x;
};

int 
main()
{
    Estrutura e;
    Uniao     u;


    /* e.c, e.i e e.x sao 3 variaveis distintas */
    printf("------------------------------------------\n");
    printf("sizeof(Estrutura) = %d\n", sizeof(Estrutura));
    e.c = 'a';
    e.i = 11;
    e.x = 22;
    printf("  e.c='%c'\n  e.i=%d\n  e.x=%f\n", e.c, e.i, e.x);

    /* u.c, e.i e u.x compartilham o mesmo espaço na memoria que pode
       armazenar apenas um valor.*/
    printf("------------------------------------------\n");
    printf("sizeof(Uniao)     = %d\n", sizeof(Uniao));
    u.c = 'a';
    u.i = 11; /* isto destroi o 'a' */
    u.x = 22; /* isto destroi o 11  */
    printf("  u.c='%c'\n  u.i=%d\n  u.x=%f\n", u.c, u.i, u.x);

    return 0;
}

SAÍDA DO PROGRAMA:
------------------------------------------
sizeof(Estrutura) = 12
  e.c='a'
  e.i=11
  e.x=22.000000
------------------------------------------
sizeof(Uniao)     = 4
  u.c=''
  u.i=1102053376
  u.x=22.000000