PDA

Visualizza la versione completa : [C++] Chi mi sa spiegare bene la differenza tra INDIRIZZO e PUNTATORE?


gif
31-01-2003, 23:31
Grazie :ciauz:

Dexterp
31-01-2003, 23:54
Ciao :ciauz:

Un indirizzo una specie di "indice" che identifica una locazione di memoria, un puntatore un "qualcosa" che punta a una locazione di memoria.

Esempio:



int k = f;
int * p = NULL; // Questo un puntatore che punta a NULL
p = &k; // Ora il puntatore punta all'indirizzo della variabile k, ovvero alla posizione nella memoria dove il valore di k si trova. per accedere al valore di k bisogna fare *p


Spero di non aver fatto errori.. (altrimenti.. :dh: ):)

bDaniele
01-02-2003, 00:01
l'indirizzo di una variabile o di un oggetto in generale l'indirizzo di memoria dove effettivamente l'oggetto allocato in memoria.

un puntatore una variabile e il suo contenuto un indirizzo, dopo essere stato inizializzato, punta alla prima locazione dell'oggetto cui esso punta.

quindi un puntatore ha un prorpio indirizzo che l'area in cui allocato e il suo valore un riverimento ad un'altra area di memoria.

altri chiarimenti?
vuoi un esempio?

Spero di essermi spiegato abbastanza.

PS: se vuoi creati un esempio allocando una variabile e un puntatore che punta alla variabile, assegna un valore alla variabile e poi stampa a video:
il contenuto della variabile e l'indirizzo
il valore dell'oggetto puntato dal puntatore e il valore del puntatore e l'indirizzo del puntatore.
noterai che il valore del puntatore uguale all'indirizzo della variabile allocata in precedenza.

Spero di non essermi sbagliato... a quest'ora il sonno, la neve e l'alcool hanno strani effetti collaterali.

r0x
01-02-2003, 00:23
31-01-2003 23:01

SONNO E ALCOOL!?!? A quest'ora i neonati fanno l'ultima poppata! :gren:

Ma LOL!

Scusate ma non resistevo.. :fagiano:

gif
01-02-2003, 12:54
Per esempio se ho:

int* c;
int s = 8;

c = &s;

cout<< c; //<-- che valore stampera c? 8 o il valore dell'indirizzo di c?


se ho invece:

int ciao = 4;
funzione(ciao);

//accedo alla funzione

void funzione(&ciao);
[
ciao = 40; //ora ciao avra il vaolre di 40 non piu di 4 o sara
//spostato all'indirizzo di memoria 40? Perche la funzione
//riceve come argomento l'indirizzo non era lo stesso se
//riceveva un puntatore alla variabile ciao cioe void funzione(*ciao);?
]

gif
01-02-2003, 20:36
nessuno puo aiutarmi?

Kamui
02-02-2003, 01:25
Originariamente inviato da gif
Per esempio se ho:

int* c;
int s = 8;

c = &s;

cout<< c; //<-- che valore stampera c? 8 o il valore dell'indirizzo di c?

Stamperai l'indirizzo di memoria di s, infatti '&' rappresenta l'indirizzo, '&s' l'indirizzo di s, che tu hai affidato a c con 'c=&s'; per stampare invece 8, devi scrivere:

cout<< *c;

che stampa il valore presente nell'indirizzo di memoria affidato a c (&s appunto).



se ho invece:

int ciao = 4;
funzione(ciao);

//accedo alla funzione

void funzione(&ciao);
[
ciao = 40; //ora ciao avra il vaolre di 40 non piu di 4 o sara
//spostato all'indirizzo di memoria 40? Perche la funzione
//riceve come argomento l'indirizzo non era lo stesso se
//riceveva un puntatore alla variabile ciao cioe void funzione(*ciao);?
]

Se passi per indirizzo, ora ciao vale 40, perch ne hai modificato il valore, non l'indirizzo; in pratica con il passaggio per indirizzo, il ciao della funzione solo un collegamento al ciao del main, se lo cambi nella funzione, cambia anche nel main.
S, puoi anche passargliela come puntatore in questo modo:

void funzione(int* ciao);

:ciauz:

gif
02-02-2003, 12:03
Originariamente inviato da Kamui
Se passi per indirizzo, ora ciao vale 40, perch ne hai modificato il valore, non l'indirizzo; in pratica con il passaggio per indirizzo, il ciao della funzione solo un collegamento al ciao del main, se lo cambi nella funzione, cambia anche nel main.
S, puoi anche passargliela come puntatore in questo modo:

void funzione(int* ciao);


come hai detto passando l'indirizzo ora avro un collegamento al ciao della main. ma se volevo cambiare il valore contenuto in ciao non era lo stesso, quindi al posto di passare il parametro come indirizzo, passarlo semplicemente come puntatore? in questo modo non sia ha lo stesso risultato?:

int ciao = 4;
funzione(ciao);

//accedo alla funzione

void funzione(*ciao);
[
ciao = 40;
]

Kamui
02-02-2003, 23:03
S, ma ricordati di scrivere anche il tipo di variabile a cui punta:

void funzione(int *ciao);
[
ciao = 40;
]

gif
02-02-2003, 23:17
Si gia. :D
Ma il punto e questo, quindi tanto passare l'indirizzo di una variabile, tanto passargli un puntatore ad essa il risultato e lo steso?

Loading