Olá, estou com uma dúvida referente a saída deste código: 
#include <stdio.h>
#include <stdlib.h>
typedef union { //uniao compartilha os dados
	char A[2];
	struct xar //para acessar nome_da_variavel_da_estrutura.nome_do_elemento
	//Quando uma variável de estrutura é declarada, o compilador C aloca automaticamente memória suficiente para acomodar todos os seus membros.
	{
		char B; //elemento da estrutura
		char C;
	}carac; // nome da variavel da estrutura
} PosCompType;
int main() 
{
	PosCompType Dado;
	Dado.A[0] = 'a';
	Dado.A[1] = 'b';
	Dado.carac.B = 'c';
	Dado.carac.C = 'd';
	printf("%c %c %c %c\n", Dado.A[0], Dado.A[1], Dado.carac.B, Dado.carac.C);
	return 0;
}
No console o resultado do printf não deveria ser abcd? 
Por que esta saindo cdcd? Será que é pelo fato de a união compartilhar memória? 
  
Troquei a ordem para: 
        Dado.carac.B = 'c';
	Dado.carac.C = 'd';
        Dado.A[0] = 'a';
	Dado.A[1] = 'b'; 
E o resultado sai abab, indiciando que os últimos valores corrompem os primeiros.  
Alguma explicação?