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
}
이것은 Robert Sedgewick, 252 페이지, 프로그램 5.19의 "C++ 알고리즘"코드의 일부입니다. 그리고 함수 max()
에서 반환 된 변수는 함수 내에 만들어진 포인터입니다.로컬 포인터를 반환
제 생각에는 로컬 포인터를 반환하는 것은 c/C++에서 허용되지 않습니다. 그래서 제 질문은 "이것과 같은 함수를 작성하는 것이 좋습니다"입니다. 나는 그런 고전적인 책이 이런 실수를 저질렀다는 것을 믿을 수 없다. 아니면 원칙을 오해 했나요? 도와주세요. 감사.
@ link : 새로운 노드 (a [m]);! = 로컬 포인터 – Mysticial
@Mysticial : 말하자면, 로컬 포인터이지만 로컬 객체를 가리 키지 않습니다 :-) –
'c'에서 로컬 변수에 대한 포인터를 경고를 반환하고, 당신이하고있는 것을 알지 못한다면 피해야 만합니다.하지만 작동 할 것입니다. 확실하지 않은'C++ '오류로 변경됩니다. – twain249