Parameterübergabe in Funktionen



  • Irgendwie will das nicht klappen. Bin ich zu dumm, einer Funktion eine Struktur zu übergeben? Mir gehen irgendwie die Werte verloren!

    //test.h
    void bla(STRUKTURNAME *bla)

    //test.c
    void bla(STRUKTURNAME *bla)
    {
    printf("%d", &(bla->wert));
    }

    //main.c
    #include "test.h"
    void main()
    {
    STRUKTURNAME xxx;
    xxx.wert = 5;
    bla(&xxx);
    }



  • Ohne zu wissen, was sich hinter "STRUKTURNAME" verbirgt, würde ich sagen, daß beim printf-Aufruf der Adress-Operator überflüssig ist.



  • Ohje ich bin so ein Trottel... Ok hat sich erledigt. Es war nicht das Problem der Zeiger, sondern die Struktur STRUKTURNAME hatte die Variable WERT vom Typ double. Ich hatte printf verwendet und anstatt %lf (was für double notwendig ist) eben %d (decimal) geschrieben.

    Ergebnis: mit %d kam immer eine sinnlose Ausgabe.

    Das mit dem Adressoperator war natürlich schwachsinn, hatte ich hier falsch getippt... danke für die Verbesserung...

    so ist es korrekt: printf("%#x=%lf", nextaddr, (element->value));
    so ist es falsch gewesen: printf("%#x=%d", nextaddr, (element->value));

    Was ein paar Stunden weniger Schlaf ausmachen 🙄



  • Ein Grund mehr, warum ich die C++ Variante bevorzuge 😃

    PS: Für die Ausgabe von double's reicht übrigens "%f" aus.



  • CStoll schrieb:

    Ein Grund mehr, warum ich die C++ Variante bevorzuge 😃

    was ist bei printf unter c++ anders?



  • vista schrieb:

    CStoll schrieb:

    Ein Grund mehr, warum ich die C++ Variante bevorzuge 😃

    was ist bei printf unter c++ anders?

    Mit C++ Variante meinte ich NICHT das dortige printf(), sondern die IOStream-Bibliothek 😉 (und bei der mußt du nicht mehr angeben, wie das System eine bestimmte Variable behandeln soll - der Compiler erkennt selbständig, ob er ein int-, double- oder MyClass-Objekt hat und kümmert sich darum, den richtigen Stream-Operator zu finden)



  • vista schrieb:

    was ist bei printf unter c++ anders?

    Printf ist nicht die C++-Variante.



  • CStoll schrieb:

    vista schrieb:

    CStoll schrieb:

    Ein Grund mehr, warum ich die C++ Variante bevorzuge 😃

    was ist bei printf unter c++ anders?

    Mit C++ Variante meinte ich NICHT das dortige printf(), sondern die IOStream-Bibliothek 😉 (und bei der mußt du nicht mehr angeben, wie das System eine bestimmte Variable behandeln soll - der Compiler erkennt selbständig, ob er ein int-, double- oder MyClass-Objekt hat und kümmert sich darum, den richtigen Stream-Operator zu finden)

    ach so.
    naja, aber das sind ja ganz andere funktionen, die wieder ihre eigenen macken mitbringen.
    nichts ist perfekt 😉



  • Ich programmiere leider unter Linux ohne grafischer Oberfläche. Mache gerade eine Kommunikationsschnittstelle zwischen Linux und POSIX (Echtzeit)...



  • pyjamaboy schrieb:

    Ich programmiere leider unter Linux ohne grafischer Oberfläche. Mache gerade eine Kommunikationsschnittstelle zwischen Linux und POSIX (Echtzeit)...

    wieso 'leider' und was hat das denn mit deinem Problem zu tun? 😕


Log in to reply