Pointer auf Strukturen ausgeben



  • Hallo zusammen,

    eigentlich habe ich nur eine recht simple Frage.
    Und zwar würde ich gerne einen Pointer auf eine Struktur mit printf auf dem Bildschirm ausgeben lassen.
    nun ist es ja aber so, dass printf einen Platzhalter für die Variable braucht.
    Zum Beispiel %i oder %d für eine Integer-Variable.
    So ein Platzhalter fehlt mir natürlich, da der Zeiger ja von dem Datentyp sein muss auf den er zeigt.
    Gibt es in dieser Hinsicht einen Weg mein Problem zu lösen oder wenigstens zu umschiffen.
    Ich habe schon versucht den Zeiger in einer Integer-Variablen zu speichern und diese auszugeben.
    Hat aber eine Warnung gegeben.
    Ich würde mich super freuen wenn mir jemand einen Wink in die richtige Richtung geben könnte. 🙂
    Gruß
    Orange



  • Für Pointer gibt es bei printf den Formatspecifier %p
    Sieha auch http://www.cplusplus.com/reference/cstdio/printf/
    oder http://en.cppreference.com/w/c/io/fprintf



  • Ohh super, Dankeschön!
    Das sehe ich mir gleich mal an.



  • wenn du nur die adresse haben willst, kannst du sie auch einfach dezimal mit %d bzw. besser hexadezimal mit %x ausgeben, also z.b.

    printf("%x",zeiger_auf_struktur);
    

    oder, wie oben erwähnt, mit %p. an der ausgabe ändert sich da nichts.



  • Verwende %p, da sizeof int nicht sizeof void* sein muss, was vor allem beim programmieren für x64 der Fall sein kann.



  • Schwachfug. Dummes Zeug. Du empfiehlst Unsinn.



  • HansKlaus schrieb:

    oder, wie oben erwähnt, mit %p. an der ausgabe ändert sich da nichts.

    Schwachfug. Dummes Zeug. Du empfiehlst Unsinn.



  • Wutz schrieb:

    Schwachfug. Dummes Zeug. Du empfiehlst Unsinn.

    In der Tat gibt es einen Unterschied zwischen %x und %p, falls du dich auf mich bezogen hast.



  • HansKlaus schrieb:

    an der ausgabe ändert sich da nichts.

    Mal abgesehen davon, dass der Tip Scheiße ist, ist die Ausgabe bei %p implementierungsabhängig.
    Kann also auch dezimal oder oktal oder binär oder ... sein



  • Ja und außerdem UB.



  • %p passt schon.

    stellt sich die frage, was es für einen sinn macht einen pointerwert auszugeben. bei unorthodoxen speicherarchitekturen, kann der schon ziemlich schräg aussehen.



  • c-noob 2016 schrieb:

    stellt sich die frage, was es für einen sinn macht einen pointerwert auszugeben.

    Z.B. um den User mit einem BSOD zu ärgern.

    c-noob 2016 schrieb:

    bei unorthodoxen speicherarchitekturen, kann der schon ziemlich schräg aussehen.

    So wie Segment:Offset im Real-Mode (beim 80x86)


Log in to reply