Originariamente inviato da Who am I
Perché questo è consentito? Forse perché il tipo char ha dimensione minore di int?
No, perché lo standard dice che un char * può essere alias di qualunque roba, ma non viceversa.
La questione comunque è dibattuta.
In ogni caso, sarebbe sempre più saggio usare l'array "di base" del tipo giusto ed eventualmente poi accedervi via char * quando necessario, sia per la strict aliasing rule, sia per evitare problemi di alignment.
E a partire da che standard è valida questa regola in C/C++?
Da sempre (con leggere differenze relative a peculiarità delle varie versioni dei linguaggi).