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
}
To jest fragment kodu z "Algorithm in C++" autorstwa Roberta Sedgewicka, strona 252, Program 5.19. W funkcji max()
zwróconą zmienną jest wskaźnik, który jest tworzony wewnątrz funkcji.Zwróć lokalny wskaźnik
Moim zdaniem, zwracanie wskaźnika lokalnego nie jest dozwolone w języku c/C++. Więc moje pytanie brzmi: "czy to jest w porządku, aby napisać taką funkcję"? Nie mogę uwierzyć, że taka klasyczna książka popełnia taki błąd. Czy źle zrozumiałem zasadę? Proszę o pomoc. Dzięki.
'link x = nowy węzeł (a [m]);'! = Wskaźnik lokalny – Mysticial
@Mysticial: Pedantically mówiąc, to * jest * lokalnym wskaźnikiem, ale nie wskazuje na lokalny obiekt :-) –
W 'c' zwraca wskaźnik do zmiennej lokalnej, w wyniku czego pojawia się ostrzeżenie i prawdopodobnie należy tego uniknąć, chyba że wiesz, co robisz, ale to zadziała. Nie jestem pewien, czy 'C++' zmienia to na błąd. – twain249