Oppure

Loading
22/11/12 14:44
cicciomaz
Scusate l'ignoranza. Mi sono incartato con i puntatori a puntatori.

In questa funzione:


void swap(int **a, int **b)
{
   int *tmp = *a;
  
   *a = *b;
   *b = tmp;
}

int x,y;
int *p, *q;

p = &x;
q = &y;

swap(&p, &q);



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

Grazie, Ciao.
aaa
22/11/12 15:19
nessuno
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à.
22/11/12 15:42
cicciomaz
scusa la cosa che non capisco è proprio questa.

Se scrivo **a = *b;

ad **a non assegno il valore di *b?
aaa
22/11/12 15:52
nessuno
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à.
22/11/12 16:17
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.
aaa
22/11/12 16:27
nessuno
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


int main()
{
	int x=5,y=6;
	int *p, *q;
 
	p = &x;
	q = &y;
 
	printf("%d %d\n", *p, *q);

	swap(&p, &q);

	printf("%d %d\n", *p, *q);

	return 0;
}


almeno si comprende cosa fa quella funzione.
Ultima modifica effettuata da nessuno 22/11/12 16: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à.