Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C] array e puntatori

Visualizzazione discussione

  1. #4
    Quote Originariamente inviata da oregon Visualizza il messaggio
    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);
    Ultima modifica di MItaly; 03-04-2015 a 08:38
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.