Mi sa che non ti è del tutto chiaro che cosa sia una union.
Una union è una struttura dati che permette a 2 o più variabili di condividere una porzione della memoria: quanta memoria occupa una union? Essa occupa il minimo spazio necessario a contenere il tipo di dato più grande. Nell'esempio che hai postato tu, quindi, hai una union che occupa esattamente 10 byte (considerando un char da 1 byte), in quanto hai un dato che occupa 10 byte (l'array di char) e un secondo dato che ne occupa 4 (o 2 dipende dal compilatore).
Graficamente, quindi, hai questa situazione (considero che un int occupi 4 byte):
codice:
|------------- stringa[10] -------------|
-----------------------------------------
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
-----------------------------------------
|----- num -----|
Supponiamo, ora che tu voglia memorizzare nella union, la seguente stringa: "Topolinia!"...
codice:
strcpy(miaUnion.stringa, "Topolinia");
Cosa succede, in memoria?
codice:
|------------- stringa[10] --------------|
------------------------------------------
| T | o | p | o | l | i | n | i | a | \0 |
------------------------------------------
|----- num -----|
Ora, proviamo a stampare il contenuto di num: la variabile num, che condivide la stessa memoria della variabile stringa, conterrà, pertanto, i caratteri "Topo", che in valore numerico, corrispondono a 1869639508.
Ciao.