structs, verschiedene Datein, Zugriff
-
Entschuldigung, ja, hier:
struct object** movingObjects;
-
Fügt man folgende Zeilen hinzu, besteht das Problem:
struct object* obj1 = (struct object*) movingObjects[0]; printf("bla: %d",obj1.xPos);
-
Bei
movingObjects[0].xPos
wird durch die Klammer [] ein * "entfernt"
Ist also noch einer übrig.Warum muss das ein Doppelzeiger sein?
-
Wenn nur noch einer da ist, müsste ich doch drauf zugreifen können, oder?
Ich denke, zwei, weil das ganze Konstrukt ein Array aus structs ist. Da der Array aus einer Funktion raus übergeben wird, geschieht das als Pointer, und in ihm sind Pointer auf bestimmte structs. Deswegen ein Pointer auf einen Pointer.
-
Wenn der Zeiger in der Parameterliste steht hast du recht.
Dann ist er aber nur lokal in der Funktion ein Doppelzeiger.Du nutzt aber den Rückgabewert der Funktion. Da brauchst du keinen Doppelzeiger.
-
Lass ich bei der Deklaration von movingObjects den zweiten Stern weg, dann kann ich auf das Element zugreifen, allerdings mit folgender Ausgabe:
bla: 334854
Das entspricht nicht dem, was xPos eigentlich sein sollte (nämlich 10).
-
Danke auf jeden Fall schon mal für deine Hilfe!
-
Ich sehe gerade das du movingObjects als Array of Pointer to struct füllst.
Da passt das mit den **
Dann mach malprintf("bla: %d",movingObjects[0]->xPos);
-
Danke für deine Hilfe, das hat funktioniert.
Dennoch, wo genau besteht der Unterschied zwischenmovingObjects[0].xPos
und
movingObjects[0]->xPos
?
-
Bei
movingObjects[0].xPos
muss der Teil vor dem Punkt eine struct sein.
BeimovingObjects[0]->xPos
muss der Teil vor dem -> ein Zeiger auf ein struct sein.
Das ist eine alternative Schreibweise für(*movingObjects[0]).xPos
Suchwort wäre "Zeiger auf Strukturen"