이진 검색 트리를 만들려고합니다. 트리에 노드를 삽입하는 재귀 프로 시저를 사용했습니다. 코드는 다음과 같습니다.C++ 포인터와 참조 포인터
void BST :: insertRoot(Node* node, int data) {
if (node == NULL)
this -> root = new Node(data);
else
insertOthers(node, data);
}
void BST :: insertOthers(Node* node, int data) {
if(node == NULL) {
node = new Node(data);
return;
}
if(data < node->getData())
insertOthers(node->getLeft(), data);
else
insertOthers(node->getRight(), data);
}
이 코드에서는 하나의 노드 만 트리에 삽입 된 다음 연결이 끊어집니다. 그러나 내가 Node*
을 Node*&
으로 변경하면 완벽하게 작동합니다. 아직도 나는이 둘의 차이점을 이해하지 못한다. 누구나 메모리 맵핑을 통해이 둘 사이의 차별화를 설명 할 수 있습니까? 고마워요
다른 질문 [내가 최근에 대답] (http://stackoverflow.com/a/27452472/10077)과 같은 문제가 있습니다.큰 차이점은 C, 이것이 C++입니다. 그러므로 한 가지 방법 (아마도 최선은 아님)은'Node * &'로했던 것처럼 포인터에 대한 참조를 전달하는 것입니다. –
'Node *'는 다른 모든 변수와 관계없이 별도의 포인터 값입니다. 'Node * &'는 다른 포인터를 가리키는 참조입니다. 예를 들어 다른 객체를 가리 키도록 변경하면 참조 대상도 변경됩니다. – cdhowie