View Full Version : Dubbio di C...
marcus81
08-02-2002, 23:02
Dunque ho trovato in un esercizio una funzione dichiarata in questo modo:
int leggifile(char *nomefile, Tree **root)...
non riesco a capire come mai mette i due asterischi...non dovrebbe usarne solo uno?ha qualke particolare funzionalità??
Poi volevo chiedervi:
ma nel return come espressione si può utilizzare anke una funzione?? x esempio return leggi(......)???e in questo caso a che servirebbe??
Grazie mille!;)
Sì...quello che segue il return è una normale espressione e può contenere qualsisi chiamata a funzione...
Per il doppio * sincramente non capisco...
Con doppio asterisco puoi passare un vettore di puntatori, ma non mi sembra questo il caso...
/\/\@®¢Ø
09-02-2002, 01:16
Probabilmente il doppio puntatore server per poter usare l'argomento per ritornare un puntatore alla radice dell'albero creato.
Forse se mostro come viene usato si vede meglio:
Tree* root; // qui root contiene pattume
int err = leggifile( "file.dat" , &root );
// ora root contiene un puntatore all'albero
Avendo passato un puntatore a root questo puo' essere modificato dalla funzione con un "valore di ritorno".
Il fatto che si usi in questo modo invece che con una dichiarazione del tipo
int leggifile( char* , Tree* )
( e quindi venga usata dopo cosi':
Tree root;
int err = leggifile( "file.dat" , &root );
)
sta nel fatto che per strutture pesanti di solito di manipolano tramite puntatori.
Giusto...non ci avevo pensato perchè io lo passerei per riferimento quel parametro...
marcus81
09-02-2002, 08:52
Ragazzi: scusatemi ma ci ho capito poco....nello stesso esercizio la chiamata di funzione è:
x=leggifile(nomefile, &root)
...quindi è una chiamata normale...intanto il programma funziona perfettamente...
poi ce n'è un'altra pure:
int insert(TREE **, int) e la chiamata è
x=insert(&root, dato).... non riesco a capire....:confused:
Ti faccio un esempio...
Tree *root;
...
...
...
spostaSx(&root);
...
...
...
int spostaSx(Tree **t)
{
//questo è solo un codice di esempio
if((*t)->sx)
{
(*t) = (*t)->sx;
return 1;
}
return 0;
}
Dentro la funzione t è un puntatore ad un puntatore ad una istanza di tipo Tree...
Quindi all'interno della funzione *t è il puntatore ad una istanza di tipo Tree...
(*t)->dato, (*t)->sx, (*t)->dx sono i membri del Tree puntato
oppure
(*(*t)).dato, (*(*t)).sx, (*(*t)).dx
Viene passato in questo modo per ritornare al chiamante l'eventuale cambiamento della posizione puntata da root...
-=Krynn=-
11-02-2002, 21:12
il mio prof all'uni c'ha insegnato a programmare coi doppi puntatori, quindi io lo trovo del tutto normale.
In quel modo è anche + pericoloso, perchè col doppio puntatore ti puoi modificare la variabile senza che te ne avevi voglia...
/\/\@®¢Ø
11-02-2002, 22:10
Originariamente inviato da cionci
[B]Giusto...non ci avevo pensato perchè io lo passerei per riferimento quel parametro...
Penso pero' che i riferimenti siano prerogativa del C++, non del C ( non ne sono pero' sicuro ! ).
Originariamente inviato da /\/\@®¢Ø
[B]
Penso pero' che i riferimenti siano prerogativa del C++, non del C ( non ne sono pero' sicuro ! ).
Mh, non lo so nemmeno io...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.