[C/C++] Chiarimento su *& nelle funzioni ricorsive

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
Krdan
Prode Principiante
Messaggi: 38
Iscrizione: giovedì 1 marzo 2007, 14:42

[C/C++] Chiarimento su *& nelle funzioni ricorsive

Messaggio da Krdan »

Visto che è da un po' che ho questo dubbio e vorrei finalmente capire, conoscete una guida o mi potete spiegare perché serve il puntatore di riferimento in certe funzioni ricorsive?
Ad esempio in questa funzione che conta i nodi di un albero binario

Codice: Seleziona tutto

unsigned dim(nodo* &root) {
	if (!root)
		return 0;
	else
		return dim(root->sx)+dim(root->dx)+1;
}
Perché se tolgo il riferimento non va più?
Grazie in anticipo  ;D
Avatar utente
paper0k
Rampante Reduce
Rampante Reduce
Messaggi: 7220
Iscrizione: lunedì 2 ottobre 2006, 13:39
Contatti:

Re: [C/C++] Chiarimento su *& nelle funzioni ricorsive

Messaggio da paper0k »

Forse ancora non ho bevuto abbastanza caffè... a me sembra strano che senza ref non funzioni.... ma perchè ti da errore? Cioè in compilazione o in esecuzione non funziona? ;)
Chiunque può essere ragionevole, ma esser sani di mente è raro (Oscar Wilde)
Wiki|Blog|Twitter|Identi.ca|last.fm
Avatar utente
zuper
Prode Principiante
Messaggi: 189
Iscrizione: martedì 6 febbraio 2007, 21:40
Località: Veternigo(VE)

Re: [C/C++] Chiarimento su *& nelle funzioni ricorsive

Messaggio da zuper »

pernso perche se passi solo nodo*

se root==0 OK

altrimenti , non avendo il riferimento, fa una copia del dato puntatore, il quale forse referenzia altrove......una volta avavo avuto un errore simile , ma non mi ricordo bene...
Avatar utente
Krdan
Prode Principiante
Messaggi: 38
Iscrizione: giovedì 1 marzo 2007, 14:42

Re: [C/C++] Chiarimento su *& nelle funzioni ricorsive

Messaggio da Krdan »

Questa funzione già è particolare a volte non va senza riferimento, però ci sono casi in cui se tolgo il riferimento ad una determinata funzione pare non fare proprio nulla.
Comunque per compilare compila, è in esecuzione che mi accorgo che queste funzioni ricorsive senza riferimento a volte non fanno assolutamente nulla.
Avatar utente
thelo
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 269
Iscrizione: lunedì 8 gennaio 2007, 17:16

Re: [C/C++] Chiarimento su *& nelle funzioni ricorsive

Messaggio da thelo »

io penso che ci sia qualcosa che non và da un altra parte...ad esempio nella funzione di inserimento nell'albero.
Lo dimostrerebbe il fatto che dici che a volte non funziona nemmeno così...
Prova a postare il codice completo(anche la definizione dell'albero)

Saluti
(b2b)
Navigammo su fragili vascelli
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
Avatar utente
Krdan
Prode Principiante
Messaggi: 38
Iscrizione: giovedì 1 marzo 2007, 14:42

Re: [C/C++] Chiarimento su *& nelle funzioni ricorsive

Messaggio da Krdan »

Codice: Seleziona tutto

struct nodo{
		string info;
		nodo* sx;
		nodo* dx;
};

void aggiungi(string &s, nodo* &al){
	if (!al){
		al=new nodo;
		al->info=s;
		al->sx=al->dx=NULL;
		return;
	}
	if (s < al->info){
		aggiungi (s, al->sx);
		return;
	}
	if (s > al->info){
		aggiungi (s, al->dx);
		return;
	}
}
Comunque il programma va perfettamente come dovrebbe andare, la mia domanda riguarda soltanto il riferimento, che se viene tolto non va più nulla.
Un esempio è la funzione di inserimento qui sopra, una volta tolto il riferimento non fa assolutamente niente, la dimensione dell'albero è 0.
Avatar utente
paper0k
Rampante Reduce
Rampante Reduce
Messaggi: 7220
Iscrizione: lunedì 2 ottobre 2006, 13:39
Contatti:

Re: [C/C++] Chiarimento su *& nelle funzioni ricorsive

Messaggio da paper0k »

Ah ok, in questo caso è giusto, perchè passi il riferimento ad un puntatore che all'interno della struttura vai ad allocare, quindi è corretto... e ci deve essere :)
Chiunque può essere ragionevole, ma esser sani di mente è raro (Oscar Wilde)
Wiki|Blog|Twitter|Identi.ca|last.fm
Avatar utente
Krdan
Prode Principiante
Messaggi: 38
Iscrizione: giovedì 1 marzo 2007, 14:42

Re: [C/C++] Chiarimento su *& nelle funzioni ricorsive

Messaggio da Krdan »

paper0k ha scritto: Ah ok, in questo caso è giusto, perchè passi il riferimento ad un puntatore che all'interno della struttura vai ad allocare, quindi è corretto... e ci deve essere :)
Si ma non ho capito perché ci deve essere @_@
Il problema di non avere il riferimento è che altrimenti non alloca memoria?
Avatar utente
paper0k
Rampante Reduce
Rampante Reduce
Messaggi: 7220
Iscrizione: lunedì 2 ottobre 2006, 13:39
Contatti:

Re: [C/C++] Chiarimento su *& nelle funzioni ricorsive

Messaggio da paper0k »

No, la memoria viene allocata ma non "ritorna" alla variabile che hai passato, ad esempio per non usare il riferimento potresti fare così:

Codice: Seleziona tutto

nodo *aggiungi(string s) {
  nodo *a1=new nodo;
  ...
  return(nodo);
}
...
nodo *x=aggiungi(s);
così non hai bisogno del riferimento ;)
Chiunque può essere ragionevole, ma esser sani di mente è raro (Oscar Wilde)
Wiki|Blog|Twitter|Identi.ca|last.fm
Avatar utente
Krdan
Prode Principiante
Messaggi: 38
Iscrizione: giovedì 1 marzo 2007, 14:42

Re: [C/C++] Chiarimento su *& nelle funzioni ricorsive

Messaggio da Krdan »

ah in pratica senza riferimento invece di lavorare direttamente sul puntatore che gli passo lavora solamente sull'indirizzo a cui punta?
Comunque si dovrei aver capito il perché del riferimento ora.  ;D
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Bing [Bot] e 2 ospiti