Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [C] teoria e puntatori

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87

    [C] teoria e puntatori

    Ciao a tutti! Avrei qualche domanda teorica per quanto riguarda i puntatori,mi danno non pochi problemi.

    Se riusciste a spiegarmi questi due esempi mi sarebbe molto di aiuto.

    che differenza c'è tra:

    *(p++) e *(p)++

    forse nel primo caso si fa riferimento al puntato della posizione incrementata di P? Cioè p si è spostato e consideriamo il suo puntato attuale.

    Oppure

    Tipodato *p; //sizeof(Tipodato)=28(bit?byte?)
    ++p;

    come descrizione è riportato "incremento pari a 7 celle di memoria" ma non capisco come lo calcoli

    infine

    i puntatori in generale che dimensioni hanno? Ok che ci sono puntatori che puntano a interi altri a caratteri, però sempre di puntatori si tratta, non credo che influisca sull'indirizzo...

    Grazie mille.

  2. #2
    Quote Originariamente inviata da Satiro88 Visualizza il messaggio
    Ciao a tutti! Avrei qualche domanda teorica per quanto riguarda i puntatori,mi danno non pochi problemi.

    Se riusciste a spiegarmi questi due esempi mi sarebbe molto di aiuto.

    che differenza c'è tra:

    *(p++) e *(p)++
    Nel primo caso ++ agisce sul puntatore, nel secondo sul valore puntato.
    codice:
    int arr[5]={0, 1, 2};
    int *p=arr;
    printf("%d", *(p++)); /* stampa 0, _poi_ p viene spostato all'elemento successivo */
    printf("%d", *p); /* stampa 1 */
    printf("%d", *(p)++); /* stampa 1 e _poi_ lo incrementa */
    printf("%d", *p); /* stampa 2 */
    /* ora arr è {0, 2, 2}, e p punta al secondo elemento */
    [/quote]
    Tipodato *p; //sizeof(Tipodato)=28(bit?byte?)
    [/quote]
    Il valore restituito da sizeof è in byte, ovvero in unità di "char" (sizeof(char)=1 per definizione).
    ++p;
    Sposta p alla posizione successiva, ma in questo caso non ha senso, visto che il puntatore non è stato inizializzato; puoi incrementare/decrementare puntatori solo se puntano all'interno del medesimo array.
    come descrizione è riportato "incremento pari a 7 celle di memoria" ma non capisco come lo calcoli
    Se sizeof(Tipodato) è 28, incrementerà di 28 byte (ovvero, passa all'elemento successivo se p sta puntando dentro un array).
    i puntatori in generale che dimensioni hanno? Ok che ci sono puntatori che puntano a interi altri a caratteri, però sempre di puntatori si tratta, non credo che influisca sull'indirizzo...
    Dipende dalla piattaforma; sulle piattaforme a 32 bit saranno 4 byte, su piattaforme a 64 bit 8 byte. Non ricordo se è garantito dallo Standard che tutti i puntatori abbiano le medesime dimensioni, ma (1) in pratica è sempre così, e (2) comunque è garantito che tutti i puntatori siano convertibili a void * senza perdita di informazione, per cui sizeof(void *) di fatto ti dà la misura dei puntatori usati sulla piattaforma corrente.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    Grazie mille! Non ho ancora ben capito la cosa delle 7 celle però,il disegno sembra rappresentare uno stack e si vede questa freccetta scendere di 7 posizioni senza inizializzarli, che sia collegato alle unità di char?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Disegno?

    Di cosa parli?

    Comunque ... l'argomento "puntatori" è spesso "mitizzato" e lo si dipinge come un argomento "complesso", la "bestia nera" di chi inizia ... In realtà è un argomento "semplicissimo" e va affrontato con questa convinzione. La cosa importantissima è capire esattamente cosa è un "puntatore" associandolo al termine "indirizzo", come per ogni casa (il dato) esiste un indirizzo.

    A questo punto tutto diventa molto più semplice.
    Ultima modifica di oregon; 24-11-2013 a 11:41
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    Grazie,avrei un'altra domanda a proposito di puntatori. Supponiamo che io nel main abbia un vettore con al proprio interno elementi di tipo struct.Immaginiamo che io lo passi ad un'altra funzione questo vettore..o meglio..l'indirizzo del primo puntato...quando adopererò il vettore nell'altra funzione dovrò usare le "freccettine" al posto dei "punti" per raggiungere i vari "campi" che costituiscono l'elemento struct?

    esempio:

    codice:
    typedef struct{
                       int pippo;
                       Dato numero;
    }Tipodato;
    
    typedef struct{
                      int pari;
                      int dispari;
    }Dato;
    
    int main()
    {
    Tipodato v[N];
    
    funzione(v);
    
    system("pause");
    return 0;
    }
    Tipodato *funzione(Tipodato *v)
    {
      for(i=0;i<N;i++)
     {
      printf("%d",v[i]->numero.pari);
      v[i]->numero.pari+1;
     }
     
    return v;
    }
    è giusta una cosa del genere?
    Ultima modifica di Satiro88; 25-11-2013 a 13:48

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Riguarda tutto il codice che hai postato ...

    cosa è numero?

    passi v per puntatore?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    no ma è una roba che ho scritto in due secondi direttamente da qui niente main o fronzoli,comunque ho corretto credo. Mi preoccupa anche la return,non sono sicuro di come farla nel caso di vettori,io gli ho detto che ci aspettiamo un puntatore a Tipodato quando farà la return,ma l'ho detto semplicemente perchè è un vettore quello che metto nella return.
    Ultima modifica di Satiro88; 25-11-2013 a 13:14

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Forse stai andando troppo "a caso" e postare così nel forum non aiuta nessuno.

    Fermati e studia meglio dal "libro" tutta la teoria. Solo dopo fai delle prove.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    non abbiamo libri,solo slide e le ho guardate tutte più volte ormai,così si capisce meglio?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Andrà meglio quando ci dirai cosa è

    numero

    nel tuo codice ...
    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.