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 fachbuch 😉 mit 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.


Anmelden zum Antworten