我是编码cpp的新手,我不明白我们如何获得有关节点主题的以下输出?有人可以帮忙吗?
提前致谢:)
以下程序的输出是
10 3 22 33
5 7 6
3 22 33
2 4 6
以下是代码:
void display(Node *head){
if(head == NULL)
cout<<"head is NULL"<<endl;
for(Node *tmp=head; tmp!=NULL; tmp = tmp->next )
cout<<" "<<tmp->data;
cout<<endl;
}
Node *func1(int value1, int value2, int value3){
Node *head = new Node;
head->next = new Node;
head->next->next = new Node;
head->next->next->next = NULL;
head->data = value1;
head->next->data = value2;
head->next->next->data = value3;
return head;
}
void func2(Node *head1, Node *head2, Node *head3){
head1->next = head3;
head1->next->data =3;
head1= head2;
head1->data = 5;
head1->next->data = 7;
head2 = head3;
head3 = head1;
}
void func3(Node *head){
for(; head!= NULL; head = head->next)
head->data *=2;
}
int main(){
Node *head1 = func1(10,20,30);
Node *head2 = func1(2,4,6);
Node *head3 = func1(11,22,33);
func2(head1, head2, head3);
display(head1);
display(head2);
display(head3);
head1 = func1(1,2,3);
func3(head1);
display(head1);
return 0;
}
修改
任何人都可以解释我们如何才能看到数据项的变化,尽管我们无法看到本地指针的变化?我认为我们不应该看到任何数据变化,因为头指针是真实副本的副本?
例如,我们可以看到head1-&gt; data = 5但是head2 = head1部分没有效果。为什么呢?
我对这个话题非常困惑,请帮忙:(
答案 0 :(得分:0)
func2
没有按你的想法行事:
void func2(Node *head1, Node *head2, Node *head3){
head1->next = head3;
head1->next->data =3;
head1= head2;
head1->data = 5;
head1->next->data = 7;
head2 = head3; // this has no effect
head3 = head1; // this has no effect
}
当你说head2 = head3
时,你只是改变了本地的head2指针,你没有改变调用者的相应指针。对于head3 = head
也是如此。
您可能打算做的是通过引用传递指针:
void func2(Node *&head1, Node *&head2, Node *&head3){...
现在调用者中的相应指针将受到分配的影响。如果参数不是引用,那么它们只是最初传递的参数的副本。