Username: Password: oppure
C/C++ - [c] puntatori a puntatori
Forum - C/C++ - [c] puntatori a puntatori

Avatar
cicciomaz (Normal User)
Newbie


Messaggi: 10
Iscritto: 23/06/2012

Segnala al moderatore
Postato alle 15:44
Giovedì, 22/11/2012
Scusate l'ignoranza. Mi sono incartato con i puntatori a puntatori.

In questa funzione:

Codice sorgente - presumibilmente C++

  1. void swap(int **a, int **b)
  2. {
  3.    int *tmp = *a;
  4.  
  5.    *a = *b;
  6.    *b = tmp;
  7. }
  8.  
  9. int x,y;
  10. int *p, *q;
  11.  
  12. p = &x;
  13. q = &y;
  14.  
  15. swap(&p, &q);



qualcuno mi sa spiegare perchè si utilizza *a = *b;     piuttosto che **a = **b;

Grazie, Ciao.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 16:19
Giovedì, 22/11/2012
Perché devi scambiare i valori dei puntatori.

PM Quote
Avatar
cicciomaz (Normal User)
Newbie


Messaggi: 10
Iscritto: 23/06/2012

Segnala al moderatore
Postato alle 16:42
Giovedì, 22/11/2012
scusa la cosa che non capisco è proprio questa.

Se scrivo **a = *b;

ad **a non assegno il valore di *b?

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 16:52
Giovedì, 22/11/2012
Non puoi scrivere

**a = *b

perché i livelli di indirezione dei due elementi sono diversi.

Ovvero il primo rappresenta un intero e il secondo un puntatore ad intero e quindi non sono assegnabili l'uno all'altro (devono essere tutte mele o tutte pere)


PM Quote
Avatar
cicciomaz (Normal User)
Newbie


Messaggi: 10
Iscritto: 23/06/2012

Segnala al moderatore
Postato alle 17:17
Giovedì, 22/11/2012
Ma allora potrei scrivere **a = **b

Quindi ecco il motivo della mia domanda : perché invece nella funzione viene scritto *a = *b ?

Scusa ma sono un po' confuso.

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 17:27
Giovedì, 22/11/2012
Testo quotato

Postato originariamente da cicciomaz:

Ma allora potrei scrivere **a = **b

Quindi ecco il motivo della mia domanda : perché invece nella funzione viene scritto *a = *b ?

Scusa ma sono un po' confuso.



Il problema della confusione deriva dalla domanda iniziale. Non bisogna chiedersi perché *a=*b o perché **a=**b ma perché viene usata quella scrittura per risolvere un determinato problema

Ora, il problema da risolvere per cui è stata adottato quel codice qual è ?

Se il main lo modifichi in questo modo


Codice sorgente - presumibilmente C++

  1. int main()
  2. {
  3.         int x=5,y=6;
  4.         int *p, *q;
  5.  
  6.         p = &x;
  7.         q = &y;
  8.  
  9.         printf("%d %d\n", *p, *q);
  10.  
  11.         swap(&p, &q);
  12.  
  13.         printf("%d %d\n", *p, *q);
  14.  
  15.         return 0;
  16. }



almeno si comprende cosa fa quella funzione.

Ultima modifica effettuata da il 22/11/2012 alle 17:28
PM Quote