
Originariamente inviata da
oregon
Butta la funzione che hai scritto, sbagliata per diversi motivi e scrivi semplicemente
codice:
float fl = (float *)arr;
printf("%12.6f", fl);
Manca un asterisco... 
Comunque, anche così non è tecnicamente valido: non ci sono problemi di strict aliasing perché i char * possono fare aliasing di qualunque cosa, ma arr potrebbe non essere allineato giusto per essere usato come float. O usi la memcpy (o equivalente):
codice:
float fl;
assert(sizeof(fl)==arr);
memcpy(&fl, arr, sizeof(fl));
printf("%12.6f", fl);
oppure lavori al contrario: prendi un float e lo pasticci accendendovi tramite un char *, cosa che non dà problemi, visto che ci pensa il compilatore ad allineare fl correttamente:
codice:
float fl;
unsigned char *arr=(unsigned char *)&fl;
arr[0] = 0x6c;
arr[1] = 0xb2;
arr[2] = 0x29;
arr[3] = 0x42;
printf("%12.6f", fl);