Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 29
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87

    [C] Dimensioni tipi di dato

    Ciao a tutti! temo sia di una banalità talmente sconcertante che pare nessuno l'abbia mai chiesto su questo forum(probabilmente causa ritorsioni).

    Avrei bisogno di fare chiarezza su qualche punto, stavo utilizzando uno strumento molto utile,chiamato compileonline(spero non ci siano problemi se faccio pubblicità),questi non ha fatto altro che generare ancora più confusione rispetto a quel poco che sapevo.

    immaginiamo la seguente struttura

    codice:
    typedef struct nd{            
                int i;
                char c;
                struct nd*next;}nodo;
    mentre nel main:

    codice:
    main(){
        int *a;
        char *p;
        char s[10]="0";
        nodo * l;
        void * v;
    }
    quali valori avranno questi elementi?sullo strumento prima menzionato facendo,per esempio,sizeof ritorna

    a=8
    p=8
    s=10
    l=8
    v=8

    Qualcuno,per favore,potrebbe spiegarmi come si calcolano?

    Grazie mille,ciao!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    I puntatori sono a 64 bit e il vettore è di 10 char

    La grandezza del puntatore non si "calcola" ... dipende dal sistema e dal compilatore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    mmmm ma s è comunque un puntatore, allora perchè torna solo 10? cioè p è grande 8 byte perchè si e punta cose a caso,quindi immagino lo consideri come se non ci fosse nulla puntato facendo la sizeof,mentre s è un puntatore a carattere con la differenza che ha in più 10 valori collegati tra loro

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Perché il nome del vettore è ANCHE il puntatore al primo elemento. Ma prima di tutto è un vettore di 10 char e la sizeof fa un'eccezione ... (vale solo per gli array allocati staticamente).

    Come puntatore potresti controllare il sizeof di &s[0]
    Ultima modifica di oregon; 04-02-2014 a 14:47
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    se faccio come dici tu,mandandogli l'indirizzo mi torna 8 altrimenti 0 senza la "&". Quindi allora, salvo ulteriori specificazioni prima tiene conto del fatto che si tratti di un vettore di 10 caratteri e quindi conta lo spazio occupato da questi.In realtà però sarebbero di più quindi,cioè i 10 caratteri più il puntatore che sono 8byte.
    Se in un esercizio mi chiedono per esempio di riportare le dimensioni di char s[10] io cosa dovrei scrivere? 10 o 18?
    Ancora una volta XD, se io ho char *p void*p int*p longint*p indipendentemente p misurerà 8 byte corretto?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    No ... non fare confusione ...

    La sizeof del vettore staticamente allocato riporta la dimensione in byte del vettore (nel tuo caso 10).

    La sizeof di un puntatore (come è anche &s[0]) riporta il numero di byte usati per un puntatore dal sistema.

    Non puoi "sommare" la dimensione dei dati con la dimensione del puntatore, non ha senso.

    La dimensione di s[10] (se sono char) è 10. Ovviamente è diverso se sono int o altro.

    Tutti i puntatori hanno medesima dimensione, nello stesso programma e sistema.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    continuo a non capire come faccia un puntatore ,da solo,a misurare 8byte e un puntatore a 10 caratteri a misurare 10byte.Cioè sembra come se anche il puntatore "da solo" punti a qualcosa tale da farlo misurare 8 byte e appena viene sovrascritto da qualcosa,tipo 10 caratteri,prende le dimensioni corrispondenti

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Tu non hai chiaro il concetto di puntatore.

    Un puntatore è "numero" che rappresenta un indirizzo e questo numero misura 8 byte (per i 64 bit) o 4 byte (per i 32 bit).

    Un puntatore è solo l'indirizzo.

    Quello a cui punta il puntatore (ovvero il dato) è un'altra cosa. Non li devi "sommare".
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    Ok,quindi io scrivendo s[10] e facendo sizeof(s) gli sto dicendo di calcolare la dimensione del contenuto,cioè 10 caratteri nel nostro caso.
    Però torno al problema di prima, se ho un esercizio che mi chiede di calcolare i byte totali utilizzati nel record di attivazione del main e gli passo s[10] dovrò tener conto sia delle dimensioni del suo contenuto sia delle dimensioni dello spazio che contiene l'indirizzo per raggiungere questi 10 caratteri?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Quote Originariamente inviata da Satiro88 Visualizza il messaggio
    Ok,quindi io scrivendo s[10] e facendo sizeof(s) gli sto dicendo di calcolare la dimensione del contenuto,cioè 10 caratteri nel nostro caso.


    Però torno al problema di prima, se ho un esercizio che mi chiede di calcolare i byte totali utilizzati nel record di attivazione del main e gli passo s[10] dovrò tener conto sia delle dimensioni del suo contenuto sia delle dimensioni dello spazio che contiene l'indirizzo per raggiungere questi 10 caratteri?
    No. Se c'è char s[10] sommerai 10, se c'è char s* sommerai 8
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.