2012-04-13 3 views
-1

내가 연결리스트 노드 클래스가 말포인터 변수에 대한 포인터를 반환하는 함수?

class node { 
    private: 
     node *next_node; 
    public: 
     node *next() const; 
}; 

node *node::next() const { 
    return next_node; 
} 

합니까 다음() 노드를 반환 ** next_node 또는 노드 * next_node. 또한 목록 클래스 함수 (즉, 삽입, 제거, 찾기)를 구현할 때 중 요한 의미는 무엇입니까?

next_node가 이미 포인터이기 때문에 ** next_node를 반환한다고 생각하는 이유는 포인터가 포인터가 될 때 포인터로 함수에 반환하기 때문입니다. 나는 같은 다른 질문을 읽어 : Linked list head double pointer passing 그 두 포인터도 목록 작업에서 작동 그래서 약간 혼란 스러웠다.

+5

나는'**, 당신이 당신 자신의 말로, 숙제 자신에게 –

+4

당신이 설명 할 수 않는 것이 좋습니다? –

+0

죄송합니다. 몇 달 동안 학교에 다니지 않았습니다. 프로그래밍 기술에 집중하고 싶었고 포인터는 저의 약점 중 하나입니다. 나는이 질문이 숙제 문제에서 벗어날 수 있는지 이해한다. – rcell

답변

0

구현 된대로 node::next() 함수는 next_node 멤버 변수의 복사본을 반환합니다. next_node과이 복사본은 동일한 node 인스턴스를 가리키고 있지만 다른 방법으로는 서로 독립적입니다.

은 여기 유형 node*의 다음 노드에 대한 포인터를 반환 선언이 말한대로의 관계를

 
next_node ----> [node instance] 
       ^
the copy ------/ 
+0

함수가 다음과 같이 구현 된 경우 차이점은 무엇입니까 node node :: next() const { return next_node; } 그냥 next_node를 값으로 반환하면 다음과 같을 수 있습니다. node * node :: next() const { return & next_node; } – rcell

+0

@rcell 실제로 컴파일되지 않습니다. 당신은'node node :: next() const {return * next_node; }'. 이것은'next_node' 값의 얕은 복사본을 반환합니다. – JaredPar

+0

'return * next_node;는'* node :: next '와 같을 것이라고 나는 생각했다. 나의 이해에 의해, 후자는 딥 카피 (deep copy) 라 불리는 것을 반환한다. – rcell

0

을 보여하려고 다소 나쁜 ASCII 예술이다.

목록을 진행하는 데 사용됩니다. 예를 들면 : 당신이이`노드를 반환 할 수 있습니다 생각하는 이유

for (node * n = list.head(); n; n = n->next()) { 
    // Process node n 
} 
관련 문제