Oppure

Loading
25/07/11 16:59
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
25/07/11 17:49
comina8
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.
aaa
25/07/11 18:39
Pitagora
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:

int a = 10;
int *bPtr = &a
if ( *bPtr == 10 )
{ .... }
else 
*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
int a = 10;
int *bPtr = &a; // bPtr ha come valore l'indirizzo di a ( NOTA, c'è un & )
*bPtr = 9; // cambio il valore puntato da bPtr;
int var = 3;
bPtr = &var; // adesso punta all'indirizzo di var
*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 25/07/11 18:40
aaa