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
}
Это фрагмент кода «Алгоритм в C++» Роберта Седжуика, страница 252, Программа 5.19. И в функции max()
, возвращаемая переменная - это указатель, который создается внутри функции.return local pointer
На мой взгляд, возврат локального указателя в c/C++ недопустим. Поэтому мой вопрос заключается в том, что «правильно ли написать такую функцию»? Я не могу поверить, что такая классическая книга ошибается. Или я неправильно понял принцип? Пожалуйста, помогите. Благодарю.
'link x = новый узел (a [m]);'! = Локальный указатель – Mysticial
@Mysticial: Педально говоря, он * является * локальным указателем, но не указывает на локальный объект :-) –
В 'c' возвращает указатель на локальную переменную с результатом предупреждения и, вероятно, следует избегать, если вы не знаете, что делаете, но она будет работать. Не уверен, что 'C++' изменяет это на ошибку. – twain249