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++ - [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.


cicciomaz
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5714
Iscritto: 03/01/2010

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


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
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?


cicciomaz
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5714
Iscritto: 03/01/2010

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)



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
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.


cicciomaz
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5714
Iscritto: 03/01/2010

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 nessuno il 22/11/2012 alle 17:28


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote