0

リンクリストをコーディングして、自分自身にCを教えようとしています。私はポインタとメモリ管理に不慣れで、少し混乱しています。私はこのコードを持っています:

/* Remove a node from the list and rejiggle the pointers */
void rm_node(struct node **listP, int index) {
    struct node *prev;
    struct node *n = *listP;
    if (index == 0) {
        *listP = *listP->next;
        free(n);
        return;
    }
    for (index; index > 0; index--) {
        n = n->next;
        if (index == 2) {
        prev = n;
        }
    }
    prev->next = n->next;
    free(n);
}

リストから要素を削除します。最初のノードを削除したい場合でも、リストを参照する方法が必要です。そのため、listPargはダブルポインターであるため、リストの最初の要素を指し、使用したノードを解放できます。頭になります。ただし、listP次のノードへのポインタにアクセスするために逆参照しようとすると、コンパイラは私に指示しますerror: request for member ‘next’ in something not a structure or union 。私はここで何が間違っているのですか?私は絶望的に混乱するかもしれないと思います..?

4

1 に答える 1

6

これ:

*listP->next

これと同じです:

*(listP->next)

代わりにこれが必要です:

(*listP)->next
于 2012-06-12T10:41:58.610 に答える