allora, ci sono un pò di errori di base.
Se usi il nome di un array SENZA graffe, non stai utilizzando o confrontando TUTTI i suoi valori, ma l'indirizzo di memoria in cui è posizionato l'array (leggiti qualcosa sui puntatori in caso)
questo, a differenza di una copia, fa si che se ad uno dei due array vengono modificati dei valori, anche l'altro array avrà i valori modificati, perchè in realtà sono due "etichette" agli stessi dati, ovvero un'insieme di bit nella ram
quindi dire:
if (alterna == ClockArray)
equivale a dire: l'array alterna, ha (o meglio punta) lo stesso indirizzo di memoria dell'array ClockArray? sintatticamente è corretto da fare
alterna = DateArray;
vuol dire, ora alterna dovrebbe puntare all'indirizzo della prima cella di DateArray, e anche questo è corretto (ricorda che modificando alterna, anche i valori contenuti in DateArray risulteranno modificati e viceversa)
Quindi cosa c'è di sbagliato?
molto probabilmente hai dichiarato alterna come un array. gli array sono dei puntatori alla prima cella di memoria di una serie di celle di memoria nella ram (l'array dal punto di vista fisico, appunto). Cambiare questo indirizzo senza prima lanciare una free() su quella zona di memoria vuol dire che finchè il programma è in esecuzione o non termina la visibilità della variabile (savo malloc manuale ma è un'altra storia), quell'aria di memoria viene considerata "in uso" e non può essere riassegnata, è un errore di programmazione. La zona di memoria si dice garbage, e quando il garbage riempie tutta la ram sia il programma, che il sistema operativo possono crashare.
Dunque per evitare problemi, gli array hanno l'indirizzo puntato costante, se non erro. Quindi dobbiamo usare un puntatore.
alterna sarà un puntatore alla prima cella dell'array:
int *alterna;
l'if e l'assegnazione rimangono uguali, persino il display:
if (alterna == ClockArray)
alterna = DateArray;
else
alterna = ClockArray;
// Display.
DisplayNumberString( alterna );
come puoi vedere un puntatore può essere tranquillamente sostituito ad un array, l'unica differenza è che l'array si prende da solo una zona memoria, mentre col puntatore devi allocarla manualmente con una malloc(), ma in questo caso non serve perchè usi delle aree di memoria già allicate dai 2 array
spero sia chiaro e che la storia sull'indirizzo dell'array costante sia corretta, perchè non sono affatto sicuro