0

メイン リストの各要素の小さなリストを作成しようとしています。メインリストは正常に機能していますが、要素にアクセスして小さなリストに要素を追加する方法がわかりません。

struct smallList
{
    char data;
    struct smallList *next;
};

struct bigList
{
    char data;
    struct bigList *next;
    struct smallList *head;
} *root;

メイン リストに追加するときは、新しいノードごとに次のように宣言します。

newNode->head = NULL;

この関数を使用して、メイン リスト内の要素への現在のポインターを取得します。

struct bigList *pointer = getPointer(root, value);

次に、smallList| using that pointer. I pass alongこの関数のポインタ ->head` に何かを追加します。そして、それは機能していません。

insert(pointer->head, value)
4

1 に答える 1

0

WhozCraig が示唆するように、ポインターへのポインターを使用して問題を解決できます。このようなもの:

void insert(struct smallList **head, char value)
{
    *head = newSmallList(value, *head);
}

newSmallList次のようになります。

struct smallList *newSmallList(char value, struct smallList *rest)
{
    struct smallList *result = malloc(sizeof(struct smallList));
    result->next = rest;
    result->data = value;
    return result;
 }

現在のセットアップの問題は、フィールドに格納されているものを変更したい場合に、pointer->head フィールド (たまたま null)の値を関数に渡していることです。同様の間違いを示す整数を使用したプログラムを次に示します。

void setFive(int i)
{
    i = 5;
}

int main(void)
{
    int myInt = 7;
    setFive(myInt);
    printf("%d\n", myInt); /* still 7! */
    return 0;
}
于 2013-03-01T03:01:41.810 に答える