Lineare Liste



  • Hallo ihr Lieben,

    ich schreib in ca 11 Tagen PG1 wobei unser Prof besonder ein Augenmerk auf Lineare Listen geworden hat, damit es nicht zu knapp wird frag ich besser mal nach, da ich einige Konzepte nicht ganz verstanden habe, fürchte ich:

    Hier ein kleiner Teil des Programmes:

    ...
    typedef struct T_BLOCK P_BLOCK;
    typedef struct T_BLOCK {
    char
    pContent; /* Zeiger auf Inhalt (oder Inhalt) /
    P_BLOCK pNext; /
    Zeiger auf nächsten Block Elemente */
    } T_BLOCK;

    P_BLOCK BlockNeu (char* pText) {
    P_BLOCK pBlock;
    assert (pText);
    pBlock = (P_BLOCK) malloc(sizeof(T_BLOCK));
    if (pBlock == (P_BLOCK)NULL)
    return (P_BLOCK)NULL;
    else {
    size_t ObjektLaenge = strlen(pText)+1;
    pBlock->pNext = (P_BLOCK)NULL;
    pBlock->pContent = (char 😉 (malloc (ObjektLaenge));
    if (pBlock->pContent == (char *)NULL) {
    free (pBlock);
    return ((P_BLOCK)NULL);
    }
    memcpy (pBlock->pContent, pText, ObjektLaenge);
    return (pBlock);
    }
    }
    void BlockFreigeben (P_BLOCK pBlock) {
    assert (pBlock && pBlock->pContent);
    free (pBlock->pContent);
    free (pBlock);
    }

    meine Probleme:
    Befehle wie P_Block pNext;
    P_Block pBlock;

    was wird hier definiert? Also P_Block als Alias von T_Block generiert Zeiger? pNext und pBlock?

    size_t, memcpy was genau macht das? Ich weiß googel hilft aber ich hab die Definitionen nicht genau verstanden

    Befehle wie z.B. pBlock->pContent ( wählt das nächste Element in der Liste aus?, Zeiger auf Zeiger? )

    pBlock->pNext = (P_BLOCK)NULL; pBlock zeigt auf pnext, findet aber keinen neuen Block und wird somit NULL?

    bitte helft mir =), Danke



  • P_Block pBlock;

    was wird hier definiert? Also P_Block als Alias von T_Block generiert Zeiger? pNext und pBlock?

    P_BLOCK ist ein Typ für Zeiger auf struct T_BLOCK wegen

    typedef struct T_BLOCK *P_BLOCK;
    

    size_t, memcpy was genau macht das?

    size_t ist ein ganzzahl-artiger Typ für die Anzahl einer Menge von Bytes.
    man: memcpy kopiert Speicherbereiche.

    Befehle wie z.B. pBlock->pContent ( wählt das nächste Element in der Liste aus?, Zeiger auf Zeiger? )

    pBlock->pContent ist das selbe wie (*pBlock).pContent .
    (ich tipp mal drauf, dass "Content" den Inhalt und nicht den Rest der Liste auswählt)

    pBlock->pNext = (P_BLOCK)NULL
    

    Das ist Schwachsinn und heisst das gleiche wie

    pBlock->pNext = NULL
    

    Ähnliches gilt für

    pBlock = (P_BLOCK) malloc(sizeof(T_BLOCK))
    

    Das ist das gleiche wie

    pBlock = malloc(sizeof(T_BLOCK))
    

    Und das nächste mal schreib vor den Code bitte [cpp] und danach [/cpp].



  • Danke für die schnelle Antwort, hab trotzdem noch 2 Fragen:

    Ähnliches gilt für
    C/C++ Code:
    pBlock = (P_BLOCK) malloc(sizeof(T_BLOCK))
    C/C++ Code:
    pBlock = (P_BLOCK) malloc(sizeof(T_BLOCK))
    C/C++ Code:
    pBlock = (P_BLOCK) malloc(sizeof(T_BLOCK))

    Das ist das gleiche wie
    C/C++ Code:
    pBlock = malloc(sizeof(T_BLOCK))
    C/C++ Code:
    pBlock = malloc(sizeof(T_BLOCK))
    C/C++ Code:
    pBlock = malloc(sizeof(T_BLOCK))

    gehört das (P_BLOCK) nicht vorne hin, damit malloc weiß an was für einen typ übergeben werden muss?
    weil normalerweise heiß es doch z.B.
    x = (int*) malloc(5*sizeof(int));

    Hier hab ich noch nicht genau verstanden, was pBlock eigentlich ist.



  • weil normalerweise heiß es doch z.B.
    x = (int*) malloc(5*sizeof(int));

    Das war vor zwanzig Jahren so.
    FAQ lesen.
    Ich wette mal drauf, daß du nie einem Compiler begegnen wirst, der antike Ausdrücke verlangt.

    Hier hab ich noch nicht genau verstanden, was pBlock eigentlich ist.

    Ein Zeiger auf einen Knoten der Liste.


Anmelden zum Antworten