Operatoren und #Define bedeutung?
-
Hallo leute,
Ich habe hier vor mir ein beispiel code, weil ich mit C noch neu bin, verstehe ich paar Sachen hier nicht.
Hier sind die beispiele.
#define Null (struct fachbuch *)0
was genau bedeutet (struct fachbuch *)0 ?
also ich weiss was struct fachbuch bedeutet aber * ohne variable und danach ) 0? was bedeutet das?
printf ("Titel: %s\n", ap->titel);
Hier verstehe ich die Argument nicht so genau, warum steht hier ap->titel?
was bedeutet "->".Danach habe ich auch sowas im code stehen.
np->next = Null;
Also im google habe ich nicht gefunden was -> genau macht.
Vielleicht kann mir hier jemand weiter helfen.
Danke im Voraus.
-
rocker1234 schrieb:
#define Null (struct fachbuch *)0
was genau bedeutet (struct fachbuch *)0 ?
also ich weiss was struct fachbuch bedeutet aber * ohne variable und danach ) 0? was bedeutet das?
Das ist eine Typumwandlung. 0 wird in den Typ
struct fachbuch*
umgewandelt.BTW ist das hoffentlich nur ein obskures Beispiel ...
printf ("Titel: %s\n", ap->titel);
Hier verstehe ich die Argument nicht so genau, warum steht hier ap->titel?
was bedeutet "->".x->y bedeutet (*x).y
-
rocker1234 schrieb:
was genau bedeutet (struct fachbuch *)0 ?
also ich weiss was struct fachbuch bedeutet aber * ohne variable und danach ) 0? was bedeutet das?
Mit dem * wird das zu einem Zeiger/pointer.
Null wird hier als der Zeiger auf ein (struct fachbuchmit der Adress 0 definiert.
Das soll den üngültigen Zeiger darstellen.Dafür gibt es aber schon NULL aus der stdlib.h.
rocker1234 schrieb:
Hier verstehe ich die Argument nicht so genau, warum steht hier ap->titel?
was bedeutet "->".ap ist hier ein Zeiger auf eine struct. mit -> greifst du auf das Element zu.
Kurzschreibweise von (*ap).titel
-
Bashar schrieb:
rocker1234 schrieb:
`
#define Null (struct fachbuch *)0
`
was genau bedeutet (struct fachbuch *)0 ?
also ich weiss was struct fachbuch bedeutet aber * ohne variable und danach ) 0? was bedeutet das?
Das ist eine Typumwandlung. 0 wird in den Typ
struct fachbuch*
umgewandelt.BTW ist das hoffentlich nur ein obskures Beispiel ...
also d.h Null wird immer (struct fachbuch )0 und 0 wird in den type struct fachbuch umgewandelt aber warum steht da fachbuch * ? ohne variable?
Bashar schrieb:
`
printf ("Titel: %s\n", ap->titel);
`
Hier verstehe ich die Argument nicht so genau, warum steht hier ap->titel?
was bedeutet "->".x->y bedeutet (*x).y
ok sorry aber habe immer noch nicht ganz verstanden
also *x ist pointer x aber .y? was macht hier "."
-
rocker1234 schrieb:
ohne variable?
Typumwandlungen (Cast-Ausdrücke) schreibt man halt so. Was soll da auch eine Variable, es ist ja keine Deklaration.
Bashar schrieb:
x->y bedeutet (*x).y
ok sorry aber habe immer noch nicht ganz verstanden
also *x ist pointer x aber .y? was macht hier "."x ist der Pointer auf eine Strukturinstanz. *x ist das worauf er zeigt. Und der . macht Elementzugriff, wie sonst auch.
-
Super !
habs jetzt verstanden.
Danke sehr Leute
:p
:p
-
also ich habe noch 1 Frage.
`
struct fachbuch {
char titel [256]; char autor [256]; int auflage; char isbn [32]; double preis; struct fachbuch * next;
};`
was bedeutet * next? ist next ein function? weil es ist kein Variable.
-
rocker1234 schrieb:
weil es ist kein Variable.
Was ist titel, autor, auflage, isbn, preis? Genau dasselbe ist next. Kann man Komponente oder Element der Struktur nennen. Oder auch Membervariable.
-
also es ist dann auch ein pointer variable?
wenn jaa, sollte es nicht ein Addresse haben?
-
next ist ein Zeiger auf eine
struct fachbuch
Und Zeiger sind auch Variablen.
Funktionen haben runde Klammern am Ende.
-
rocker1234 schrieb:
also es ist dann auch ein pointer variable?
wenn jaa, sollte es nicht ein Addresse haben?
Die Adresse kannst du beim erzeugen einer zweiten/ neuen "fachbuch"-Struktur übergeben.
Durch diesen rekursiven Aufbau hast du zB die möglichkeit eine verkettet Liste zu erzeugen, die dann durch den Aufruf der ersten "fachbuch"-Struktur alle anderen Strukturen ansprechen kann, da du ja den Pointer fürs zB das nächste Element unter *next ablegst.Dann wäre zB. fachbuch1->next = &fachbuch2;
usw.