Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Istruzione sconosciuta in C

    Ciau,

    ieri mi sono trovato davanti ad un'istruzione C che non avevo mai visto prima, qualcuno potrebbe spiegarmi cosa fa?

    codice:
    *(long *)&Array[0]=0x61;
    Thx
    Gnix
    http://www.ptrace.net

  2. #2
    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...
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

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.