2014-12-04 2 views
-2

/* 이것은 연결 목록에 노드를 추가하는 것입니다. 함수를 추가 할 때마다 헤드 포인터가 null로 설정되는 이유를 알아낼 수 없습니다. */ // 노드의 구조체 선언 구조체 노드 { int data; node * next; };C++에서 연결된 목록에 노드 추가

node *head; 

//adding node to the head pointer 
void addnode(node* head,int d) 
{ 
node *temp = new node; 
temp->data =d; 
temp->next=NULL; 
node* tmp=head; 
if(tmp!=NULL) 
{ 
    cout<<"shal"; 
    while(tmp->next!=NULL) 
    tmp=tmp->next; 
    tmp->next=temp; 
} 
else 
{ 
    //cout<<temp->data; 
    head=temp; 
} 
    cout<<"dh"<<head->data; 
} 

//main function 
int main() 
{`enter code here` 
    head=NULL; 
//calling the add function 
    addnode(head,10); 
//head is being taking as null here 
    addnode(head,20); 
} 

/* 출력 : 잘못 어디로 갔는지 dh10nulldh20null 이해에서 저를 도와주세요. 고마워. */

+0

글로벌'head'와 매개 변수'head'가 있습니까? Eww. 한 가지만 전역 사용을 중지하십시오. – crashmstr

+0

값을 통한 전달과 참조로 전달의 동작의 차이점을 이해해야합니다. – Speed8ump

답변

0

포인터가 무엇인지 알지 못했을 것입니다.

분명히, num은 여전히 ​​42입니다. 왜? 기능상으로 plus_one 당신은 num를 사본으로 얻는다.

당신이 전화 할 때 addnode, 당신은 당신의 head 포인터의 사본을 보낼 수 있습니다. 그것이 포인터이기 때문에 포인터 자체가 아닌 POINTED BY를 수정할 수 있습니다. 당신이하는 일은 제 예제로 43을 얻으려고하는 것과 같은 것입니다. 복사본을 얻는다면 불가능합니다.

포인터의 주소를 전달해야하므로 함수를 addnode(&head, 10);으로 호출하고 프로토 타입을 void addnode(node** head,int d)으로 작성하십시오. 새 node**에 맞게 기능을 수정해야합니다.

왜 작동합니까? 왜냐하면 POINTING TO POINTING의 내용을 원래 포인터로 수정하기 때문입니다.

관련 문제