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
}
Đây là một đoạn mã từ "Thuật toán trong c + +" của Robert Sedgewick, Trang 252, Chương trình 5.19. Và trong hàm max()
, biến trả về là một con trỏ được tạo bên trong hàm.trả về một con trỏ cục bộ
Theo ý kiến của tôi, trả về một con trỏ cục bộ không được phép trong c/C++. Vì vậy, câu hỏi của tôi là "là OK để viết một chức năng như thế này"? Tôi không thể tin một cuốn sách kinh điển như vậy lại phạm sai lầm như thế này. Hoặc tôi hiểu lầm nguyên tắc? Xin vui lòng giúp đỡ. Cảm ơn.
'link x = nút mới (a [m]);'! = Local pointer – Mysticial
@Micicial: Nói theo cách nói, nó * là * một con trỏ cục bộ, nhưng nó không trỏ đến một đối tượng cục bộ :-) –
Trong 'c' trả về một con trỏ đến một biến cục bộ với kết quả trong một cảnh báo, và có lẽ nên tránh trừ khi bạn biết bạn đang làm gì, nhưng nó sẽ hoạt động. Không chắc chắn là 'C++' thay đổi thành một lỗi. – twain249