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 aufstruct T_BLOCK
wegentypedef 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.