struct node
{
Item item; node *l, *r;
node(Item x) {item = x; l = 0; r = 0;}
};
typedef node* link;
link max(Item a[], int l, int r)
{
int m = (l+r)/2;
link x = new node(a[m]);
if (l==r) return x; // return a local pointer
x->l = max(a, l, m);
x-r = max(a, m+1, r);
Item u = x->l->item, v = x->r->item;
if (u>v) x->item = u;
else x->item=v;
return x; // return a local pointer
}
Questa è una parte di codice da "Algorithm in C++" di Robert Sedgewick, pagina 252, Programma 5.19. E nella funzione max()
, la variabile restituita è un puntatore che viene creato all'interno della funzione.restituisce un puntatore locale
A mio parere, restituire un puntatore locale non è consentito in c/C++. Quindi la mia domanda è che "è OK scrivere una funzione come questa"? Non posso credere che un libro così classico commetta errori come questo. O ho frainteso il principio? Per favore aiuto. Grazie.
'link x = nuovo nodo (a [m]);'! = Puntatore locale – Mysticial
@Mysticial: Pedanticamente parlando, * è * un puntatore locale, ma non punta a un oggetto locale :-) –
In 'c' restituire un puntatore a una variabile locale con risultato in un avviso, e probabilmente dovrebbe essere evitato a meno che non si sappia cosa si sta facendo, ma funzionerà. Non è sicuro che 'C++' lo cambi in un errore. – twain249