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