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