Hab es eins zu eins so abgetippt (verwende ATOM zum Programmschreiben und Debian als Konsole auf Windows 10 64Bit), leider meckert der schon bei der Funktion "showList", 20:9: "warning: assignment `listElement *` from incompatible pointer type `struct listElement *` [-Wincompatible-pointer-types]" 20 | p = p->next; | ^ Vielleicht ne Idee woran das liegen könnte?
Scheinbar unterscheidet dein Compiler streng zwischen den Datentypen 'struct listElement' und 'listElement'. Ändere doch mal die Deklaration der Struktur wie folgt: typedef struct listElement listElement; struct listElement { listElement* next; DATA d; };
Frage zu dem Pointer auf Pointer: Warum muss der *pointer auf pointer* (z.B. **ptrptr) vom selben Datentyp sein, wie der pointer (*ptr) auf den er zeigt?
Super Frage! Die Kurzantwort auf deine Frage: Es müsste nicht derselbe Datentyp sein (sondern könnte z.B. auch der void-Pointer sein). Der Datentyp des Pointers ist wichtig bei der Dereferenzierung (siehe auch hier: th-cam.com/video/w72SblkZ0M8/w-d-xo.html). Bei "Doppelpointern" ist die Dereferenzierung wieder eine Adresse, die jedem anderen typisierten Pointer zugewiesen werden kann.
Hab es eins zu eins so abgetippt (verwende ATOM zum Programmschreiben und Debian als Konsole auf Windows 10 64Bit), leider meckert der schon bei der Funktion "showList",
20:9: "warning: assignment `listElement *` from incompatible pointer type `struct listElement *` [-Wincompatible-pointer-types]"
20 | p = p->next;
| ^
Vielleicht ne Idee woran das liegen könnte?
Scheinbar unterscheidet dein Compiler streng zwischen den Datentypen 'struct listElement' und 'listElement'. Ändere doch mal die Deklaration der Struktur wie folgt:
typedef struct listElement listElement;
struct listElement {
listElement* next;
DATA d;
};
Frage zu dem Pointer auf Pointer: Warum muss der *pointer auf pointer* (z.B. **ptrptr) vom selben Datentyp sein, wie der pointer (*ptr) auf den er zeigt?
Super Frage! Die Kurzantwort auf deine Frage: Es müsste nicht derselbe Datentyp sein (sondern könnte z.B. auch der void-Pointer sein).
Der Datentyp des Pointers ist wichtig bei der Dereferenzierung (siehe auch hier: th-cam.com/video/w72SblkZ0M8/w-d-xo.html). Bei "Doppelpointern" ist die Dereferenzierung wieder eine Adresse, die jedem anderen typisierten Pointer zugewiesen werden kann.