Allora vediamo...

codice:
*(long *)&Array[0]=0x61;
Quindi, concentrandoci sulla parte a sinistra dell'uguale:

codice:
Array[0] // E' il primo valore di un array
&Array[0] // E' l'indirizzo del primo valore dell'array
(long *)&Array[0] // E' lo stesso indirizzo castato in modo da puntare alla rappresentazione di un long
*(long *)&Array[0] // Il valore della locazione in cui si trova Array[0] interpretato come un long
Ora, se Array[0] e' gia' un long non succede niente di strano. Viceversa, siccome l'espressione a destra dell'uguale NON e' un long, e siccome mi sembra l'ANSI C non preveda specificamente cosa debba accadere in casi del genere, il comportamento non puo' essere previsto a priori.
Se ad esempio si adottasse la convenzione big endian, e se Array fosse di tipo int, probabilmente il valore 0x61 verrebbe memorizzato in Array[1] mentre Array[0] verrebbe azzerato.

Spero di non aver detto troppe cazzate...