Come agisce il cast sul puntatore?

di il
7 risposte

Come agisce il cast sul puntatore?

Ciao! Non riesco a capire perché il valore della variabile int a dopo l'esecuzione del programma cambi da 1000 a 768... In che modo agisce il cast in questo caso? Vorrei poi che mi spiegaste perché proprio 768 se c'è un motivo...
Grazie!!!

int main() {
	int a=1000;
	char* pa=(char*)&a;
	*pa=0;
	printf("%d",a);
}

7 Risposte

  • Re: Come agisce il cast sul puntatore?

    Un intero (a 32 bit) è memorizzato in 4 byte (a quello meno significativo a quello più significativo) e il valore 1000 è memorizzato con i byte (valori espressi in esadecimale)

    78 03 00 00

    ovvero 0x000003E8 = 1000 decimale

    Quando accedi al valore con un puntatore a char stai accedendo solo al primo byte perché un char è grande 1 byte e non 4. Quindi stai azzerando solo il primo byte e la variabile a diventa

    00 03 00 00

    Quando visualizzi la variabile come intero questa vale

    0x00000300 = 768 decimale
  • Re: Come agisce il cast sul puntatore?

    Grazie per la risposta, solo un'ultima cosa non mi è chiara..
    Perché 1000 in esadecimale viene rappresentato con 78 03 00 00 ? Come trovo questo valore?

    oregon ha scritto:


    Un intero (a 32 bit) è memorizzato in 4 byte (a quello meno significativo a quello più significativo) e il valore 1000 è memorizzato con i byte (valori espressi in esadecimale)

    78 03 00 00

    ovvero 0x00000378 = 1000 decimale

    Quando accedi al valore con un puntatore a char stai accedendo solo al primo byte perché un char è grande 1 byte e non 4. Quindi stai azzerando solo il primo byte e la variabile a diventa

    00 03 00 00

    Quando visualizzi la variabile come intero questa vale

    0x00000300 = 768 decimale
  • Re: Come agisce il cast sul puntatore?

    Perche' stai usando la rappresentazione in base 16 e NON in base 10!

    Non sai che cosa e'?
    FORSE e' il caso di STUDIARE prima!
  • Re: Come agisce il cast sul puntatore?

    mrzyasha ha scritto:


    Grazie per la risposta, solo un'ultima cosa non mi è chiara..
    Perché 1000 in esadecimale viene rappresentato con E8 03 00 00 ? Come trovo questo valore?
    In esadecimale 1000 vale 3E8
    Da leggere

    https://it.wikipedia.org/wiki/Sistema_numerico_esadecimale


    La rappresentazione in memoria segue la regola "Little endian" (per i computer e SO con cui trattiamo normalmente).
    Da leggere

    https://it.wikipedia.org/wiki/Ordine_dei_byt
  • Re: Come agisce il cast sul puntatore?

    Scusa ma 1000 (decimale) non diventa 3E8 in esadecimale? Non che poi cambi la soluzione del problema originale, perché comunque tornerebbe lo stesso valore azzerando il primo byte, però per capire bene
    In ogni caso grazie mille!

    oregon ha scritto:


    mrzyasha ha scritto:


    Grazie per la risposta, solo un'ultima cosa non mi è chiara..
    Perché 1000 in esadecimale viene rappresentato con 78 03 00 00 ? Come trovo questo valore?
    In esadecimale 1000 vale 378
    Da leggere

    https://it.wikipedia.org/wiki/Sistema_numerico_esadecimale


    La rappresentazione in memoria segue la regola "Little endian" (per i computer e SO con cui trattiamo normalmente).
    Da leggere

    https://it.wikipedia.org/wiki/Ordine_dei_byt
  • Re: Come agisce il cast sul puntatore?

    Ti assicuro che questa informazione mi era già chiara, grazie!

    migliorabile ha scritto:


    Perche' stai usando la rappresentazione in base 16 e NON in base 10!

    Non sai che cosa e'?
    FORSE e' il caso di STUDIARE prima!
  • Re: Come agisce il cast sul puntatore?

    mrzyasha ha scritto:


    Scusa ma 1000 (decimale) non diventa 3E8 in esadecimale? Non che poi cambi la soluzione del problema
    Sì 3E8 ... chiaramente la questione non cambia... ho corretto l'errore di copia incolla...
Devi accedere o registrarti per scrivere nel forum
7 risposte