1

作成したリストに 1 つの項目を追加する関数があります。初めてで、リストが を指している場合NULL、リストを割り当てて完成させ、アドレスを返します。初めてでない場合は、別のアイテムを追加し、最初のアイテムをもう一度返します (今では、この戻り値を無視できます)。リストと関数は正常に動作します。プロトタイプは次のとおりです。

typedef struct structTAppConsoleList {
    char *text;
    void (*cbFunction)(int);
    int number; // This is the item number
    struct structTAppConsoleList *previous;
    struct structTAppConsoleList *next;
} TList;

TList *AppConsoleListAddItem(TList *p_list, const char *p_string, void (*p_funcPtr)(int));

そのため、コードのどこかでそれらをたくさん作成する必要があり、以下のコードに示すように作成しようとしています。問題は、それを機能させることができないということです...作成したいリストをグループ化するものを作成し、それを関数で使用したいと考えています。以下のコードは、私がやろうとしていることのアイデアです。3 つのリストを割り当てようとする部分だけを考慮してください。残りはこの例では重要ではありません。

TList *list1;
TList *list2;
TList *list3;

int main(void)
{
    int i,j;
    TList **groupMyLists;
    TList *temp;

    groupMyLists=malloc(sizeof(TList)*3);

    *groupMyLists    =(TList*)&list1;
    *(groupMyLists+1)=(TList*)&list2;
    *(groupMyLists+2)=(TList*)&list3;

    for(j=0;j<3;j++) {
        temp=NULL;
        for(i=0;i<10;i++) {
            temp=AppConsoleListAddItem(temp,"some text",someFunc);
        }
        **groupMyLists=temp; // my make won't let me do this
        groupMyLists++;
    }
}

これでうまくいくと確信していますが、コンパイルできません。

私の頭の中で(*groupMyLists)は、 、 、 (&list1)(&list2)、、(&list3)、 と同じ(**groupMyLists)です。では、なぜ私はできないのですか?誰?(list1)(list2)(list3)(**groupMyLists=temp)

私は自分自身を明確にしたことを願っています!! 私が行おうとしているこの狂気を説明するのは簡単ではありません...

4

3 に答える 3

1

この行を変更してください。間違った間接指定を使用しています。

*groupMyLists=temp;
于 2012-11-22T22:14:15.830 に答える