2013-03-03 67 views
-2

下面是一个循环链表的节点结构声明:移动功能的一部分到另一个函数

struct Node 
{ 
    int x; // info field 
    struct Node *Next; 
}; 

int main()我有一个循环,填补从1到10的数字列表:

int main() 
{ 

    Node *Head=NULL, *Tail=NULL; 
    int size = 0; 
    int info = 0; 

    for (int j = 0; j < 10; j++) 
    { // for 
     info++; 
     size++; 
     Node *temp=new Node; 
     temp->Next=Head; 
     temp->x=info; 

     if (Head!=NULL) 
     { 
      Tail->Next = temp; 
      Tail=temp; 
     } 

     else Head=Tail=temp; 
    } // endfor 
} 

如何制作一个包含此循环的函数,并从main()调用? 事情是这样的:

void Fill(struct Node *Head, struct Node *Tail, int &x, int &info) 
{ 
    // <function body> 
} 

int main() 
{ 
... 
Fill(Head, Tail, x, info); 
... 
} 

不工作:(

+3

你怎么说“如何制作一个包含这个循环的函数”?什么不起作用?你的函数体内没有任何东西。什么是'x'和'info'应该保持? – 2013-03-03 14:32:02

回答

0

你的函数需要实际修改功率HeadTail(即修改这些指针点)因此,你需要通过他们。参考Node *&

在另一方面,x是不是你需要传递给函数的变量。(这是Node结构的成员。)

所以你的函数应定义是这样的:你想传递给函数使得功能使得它的功能以外的任何变更,则需要按引用传递

void Fill(Node *&Head, Node *&Tail, int &info) 
{ 
    // <function body> 
} 

任何(或做甚至更复杂一些,如指针,在HeadTail的情况下,将指向指针的指针)。

+0

非常感谢。不知道'*&'。是的,我犯了一个错误,它是我需要传递给函数的'info'和'size'变量,而不是'x'。 – 2013-03-03 14:41:42

+0

@WildSpirit是的,我不确定'尺寸'。如果你想修改函数内部的内容(并且修改反映在函数之外),那么是的,你也需要将它作为参考。 – jogojapan 2013-03-03 14:42:41

相关问题