-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);
...
}

動作しません:(

4

1 に答える 1

0

Head関数には、実際に変更およびTail(つまり、これらのポインターが指す場所を変更する)ための機能が必要です。したがって、それらを参照渡しする必要がありますNode *&

一方、xは関数に渡す必要のある変数ではありません。(構造体のメンバーですNode。)

したがって、関数は次のように定義する必要があります。

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

関数が行った変更が関数の外部に反映されるように、関数に渡したいものはすべて、参照渡しする必要があります (または、ポインタのようにさらに複雑なことを行う必要がありHeadますTail。ポインター)。

于 2013-03-03T14:36:39.020 に答える