Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Puntatori
Forum - C/C++ - Puntatori

Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Ciao a tutti, sto studiando questi maledetti puntatori, a prescindere che non ho capito ancora come utilizzarli, servono unicamente a velocizzare le operazioni?

Nel senso che loro copiano unicamente l'indirizzo di memoria di una variabile senza copiarne il valore.Ossia se ho:

int a=100;
int b;

b=a;

in questo caso copio il valore di a e lo metto in b impiegando un determinato tempo(p1).Mentre se faccio così:
int a=100;
int *p=&a;

copio in p l'indirizzo di a impiegando un minor tempo rispetto a p1?

Ultima cosa perchè devo scrivere *p=&a e non *p=a?? sto andando in confusione purtroppo

PM
Avatar
comina8 (Normal User)
Pro


Messaggi: 86
Iscritto: 18/06/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 19:49
Lunedì, 25/07/2011
Nell'esempio che hai fatto te il tempo è +o- uguale...
Dichiarando una variabile "int a" il suo valore è dato da "a" il suo indirizzo è dato da "&a".
Dichiarando una variabile "int *a", il suo valore è dato da "*a" il suo indirizzo è dato da "a" (naturalmente va allocata la memoria).

Un esempio molto semplice può essere quello di un vettore

int a[10];

Se ad esempio vuoi passarlo ad una funzione scriverai Funzione(a)
perché in questo modo passerai l'indirizzo della prima cella di memoria.
Volendo invece passare un valore farai Funzione(a[Indice]).
a[Indice] corrisponde al valore della cella di memoria puntata da "a" più Indice celle.

int a[10]; si potrebbe scrivere quindi come int *a;
a sarà quindi un puntatore ad una cella di memoria e, allocando una cella sola, si avrà una variabile come "int a", allocando più celle si avrà un vettore.

PS: Naturalmente c'è una diversa gestione della memoria in base alle due dichiarazioni ma per adesso non interessa.

Questa guida: http://www.science.unitn.it/~fiorella/guidac/guidac025.html, mi sembra abbastanza chiara, prova a darci un'occhiata... - comina8 - 25/07/11 23:08
PM
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 20:39
Lunedì, 25/07/2011
PREMESSA, DEVI STUDIARE DA UN LIBRO!

OK, il puntatore è una variabile avente come valore l'indirizzo di una altra variabile. Per poter accedere al valore presente nell'indirizzo, in cui punta il puntatore, bisogna deferenziare esso. Per poter deferenziare bisogna anteporre un * al puntatore. Esempio:

Codice sorgente - presumibilmente C++

  1. int a = 10;
  2. int *bPtr = &a
  3. if ( *bPtr == 10 )
  4. { .... }
  5. else
  6. *bPtr = 10;



Come puoi vedere dichiaro una variabile di tipo intero avente come valore 10. Creo una variabile puntatore ad intero e lo faccio puntare all'INDIRIZZO di a. l'operatore & anteposto ad una variabile permette di avere l'indirizzo di quella variabile.
Esempio
Codice sorgente - presumibilmente C/C++

  1. int a = 10;
  2. int *bPtr = &a; // bPtr ha come valore l'indirizzo di a ( NOTA, c'è un & )
  3. *bPtr = 9; // cambio il valore puntato da bPtr;
  4. int var = 3;
  5. bPtr = &var; // adesso punta all'indirizzo di var
  6. *bPtr = 2; // cambia il valore presente nell'indirizzo di var



Adesso non entriamo in particolari come gli array. Ti basta sapere cosa sono e come usarli. Più avanti imparerai da te. SEMPRE CON UN BUON LIBRO!

Ultima modifica effettuata da Pitagora il 25/07/2011 alle 20:40
Per esperienza personale, è una cosa che si impara con il tempo, è proprio una cosa che ti devi immaginare nella mente la teoria non basta in certi casi... - comina8 - 25/07/11 21:30
Supernova, cambia libro. Spero che queste informazioni siano state utili per te ^^ - Pitagora - 25/07/11 22:57


Yep, I came back :P
PM
Usa i commenti per chiedere spiegazioni o ringraziare le risposte.