Problema puntatori in C

di il
10 risposte

Problema puntatori in C

Ciao a tutti, sono Mattia e sono nuovo del forum, sono al primo anno di ingegneria informatica e quindi ho moltissimi dubbi su linguaggi di programmazione e tanto altro..

La mia domanda è questa: nei puntatori ho questo frammento di codice:

int *v1;
int v2 = 0;
v1 = &v2;
printf("%d", v1);

La risposta mi dice che in output mi da l'indirizzo della variabile v2 interpretato come intero..
Quello che non capisco è int *v1 e subito dopo v1. Io ho dichiarato una variabile puntatore ad intero giusto? la variabile v1 non deferenziata cos'è?

Un altra domanda sempre legata a questa è che in molte funzioni come questa:

long int strtol ( const char * str, char ** endptr, int base )

ho in un parametro un puntatore ad un puntatore... non ho capito il concetto di fare una cosa così...

Graziee

10 Risposte

  • Re: Problema puntatori in C

    Mattia541993 ha scritto:


    Io ho dichiarato una variabile puntatore ad intero giusto?

    la variabile v1 non deferenziata cos'è?
    In quel caso, l'indirizzo di v2
    ho in un parametro un puntatore ad un puntatore... non ho capito il concetto di fare una cosa così...
    Ad esempio, una stringa è rappresentata da un puntatore al primo carattere.
    Un array di stringhe lo puoi rappresentare come un puntatore ad un elenco di puntatori che rappresentano le varie stringhe.
  • Re: Problema puntatori in C

    Credo do aver capito il puntatore ad un puntatore grazie quindi però una cosa così la si può trovare quasi esclusivamente quando si opera nelle stringhe?

    e... al posto di dichiarare *v1, se avessi dichiarato solo int v1 e a v1 avessi assegnato &v2 sarei arrivato allo stesso risultato?
  • Re: Problema puntatori in C

    Mattia541993 ha scritto:


    credo do aver capito il puntatore ad un puntatore grazie quindi però una cosa così la si può trovare quasi esclusivamente quando si opera nelle stringhe?
    No ... non è detto ... ad esempio puoi usarlo per rappresentare strutture complesse come gli alberi e per molto altro.
    e... al posto di dichiarare *v1, se avessi dichiarato solo int v1 e a v1 avessi assegnato &v2 sarei arrivato allo stesso risultato?
    Il compilatore ti avrebbe avvisato dell'incongruenza (impossibile assegnare il valore di un puntatore ad un intero).

    E' vero che avresti potuto effettuare un "cast" ma lascia perdere per ora, ti potrebbe confondere ancora di più.
  • Re: Problema puntatori in C

    Ahh, lasciando perdere per ora alberi che sinceramente non so cosa siano ancora...
    Dichiarando quella varaibile v1 come puntatore ad intero, tutti i v1 che scrivo anche se non deferenziati il programma me li riconosce come variabili puntatore?

    (intanto grazie per le risposte anche a domande stupide forse, però come avrai capito parto da zero quasi)
  • Re: Problema puntatori in C

    Mattia541993 ha scritto:


    ahh, lasciando perdere per ora alberi che sinceramente non so cosa siano ancora...
    Dichiarando quella varaibile v1 come puntatore ad intero, tutti i v1 che scrivo anche se non deferenziati il programma me li riconosce come variabili puntatore?
    Questa non l'ho capita ...
    (intanto grazie per le risposte anche a domande stupide forse, però come avrai capito parto da zero quasi)
    Prego ... ma quello che consiglio di fare è studiare da un libro di C anche di base. Non imparerai l'uso dei puntatori da un forum.
  • Re: Problema puntatori in C

    Quello lo sto facendo e chiedo appunto quello che non capisco

    int *v1;
    int v2 = 0;
    v1 = &v2;
    printf("%d", v1)

    in questo testo ho dichiarato int *v1, poi al momento dell'assegnamento ho scritto v1 invece che *v1.
    Questo vuol dire che v1=&v2 è come se fosse scritto *v1=&v2?
  • Re: Problema puntatori in C

    Ti avevo già risposto a questa domanda

    Il compilatore ti avrebbe avvisato dell'incongruenza (impossibile assegnare il valore di un puntatore ad un intero).

    E' vero che avresti potuto effettuare un "cast" ma lascia perdere per ora, ti potrebbe confondere ancora di più.
  • Re: Problema puntatori in C

    È vero, mi avevi risposto al caso in cui io al posto di dichiarare int *v1 avessi dichiarato int v1 (senza puntatore) e poi a v1 avessi assegnato l'indirizzo in memoria di v2.

    Ora la mia domanda era: se avessi dichiarato int *v1 e poi avessi assegnato solo a v1(senza puntatore) il valore della cella v2, il compilatore come avrebbe interpretato v1?
  • Re: Problema puntatori in C

    Che ne dici di fare le prove col compilatore? Vedrai che non c'é bisogno di fare domande in quanto stai convertendo mele in pere e il compilatore ti dirá che non si puó.
  • Re: Problema puntatori in C

    Avevi ragione credo di aver capito adesso... grazie
Devi accedere o registrarti per scrivere nel forum
10 risposte