variablen im Speicher, Adresse auslesen



  • Hallo zusammen,
    habe mich soeben im Forum angemeldet, nachdem ich hier schon viel gelesen habe.
    programmiere derzeit in Python und PHP und versuche mich nun auch in c++.
    Nun bin ich aber an einer Stelle angekommen, wo mir auch google usw. nicht mehr weiterhilft.
    Vielleicht könnt ihr mir folgendes erklären:
    Warum erhalte ich die Adresse der char Variablen nicht als Ausgabe?

    #include <cstdio>
    #include <cstdlib>
    #include <iostream>
    #include "string.h"
    using namespace std;
    
    int main ()
    {
        bool b;
        char c;
        string sz;
        int  n;
        long l;
        float f;
        double d;
    
        cout <<"bool: " << sizeof b <<endl;
        cout <<"char: " << sizeof c <<endl;
        cout <<"string: "<< sizeof sz <<endl;
        cout <<"int: " << sizeof n <<endl;
        cout <<"long: " << sizeof l <<endl;
        cout <<"float: " << sizeof f <<endl;
        cout <<"double: " << sizeof d <<endl;
    
        cout <<"bool: " << &b <<endl;
        cout <<"char: " << &c <<endl;
        cout <<"string: "<< &sz<<endl;
        cout <<"int: " << &n <<endl;
        cout <<"long: " << &l <<endl;
        cout <<"float: " << &f <<endl;
        cout <<"double: " << &d <<endl;
    
        return 0;
    }
    

    Ausgabe:

    [code]
    bool: 1
    char: 1
    string: 8
    int: 4
    long: 8
    float: 4
    double: 8
    bool: 0x7fffcef88d6f
    char:                     <-----enthält keinen Wert
    string: 0x7fffcef88d50
    int: 0x7fffcef88d68
    long: 0x7fffcef88d48
    float: 0x7fffcef88d64
    double: 0x7fffcef88d40
    [/code]
    

    Für Antworten schon mal Danke im Voraus
    catdog
    P.S. Bin das erste mal in einem Forum.



  • Konvertier die Adresse nach long (unter 32 Bit) und benutze den hex-Manipulator, dann klappt es.

    cout << hex << (long)&c << endl;
    

    Er versucht vermutlich, den Zeiger zu dereferenzieren oder so, keine Ahnung... 🤡



  • catdog schrieb:

    Vielleicht könnt ihr mir folgendes erklären:
    Warum erhalte ich die Adresse der char Variablen nicht als Ausgabe?

    Ehrlich gesagt: Keine Ahnung.
    Aber andere Anmerkungen:

    1. Verwende für C/C++ bitte statt den code-Tags die cpp-Tags (Wegen farblicher Syntaxhervorhebung), und für allgemein fixe Anzeige (z.B. Ausgaben) wiederum die code-Tags.
    2. Ist "string.h" eine eigene Datei? Weil std::string aus der Standardbibliothek <string> heißt.
    3. Wozu bindest du die C-Bibliotheken <cstdio>, <cstdlib> ein? Verwenden tust du diese nicht.
    4. Ich muss sagen das "sizeof b" mich als Schreibweise überrascht, üblich ist eigentlich sizeof(b).
    5. Dies ist nur als Vorgriff zu sehen: Bitte gewöhn dir die "using namespace"-Schreibweise nicht bei Headern an (Macht Namensräume global bekannt, was das Prinzip der Namensräume unterwandert).

    cu André



  • Der Compiler nimmt die Version von operator<< die einen const char* erwartet. Drum wird versucht ein String in den Stream zu schreiben und die Adresse wird nicht gecastet.

    @asc: Die Klammern die man üblicherweise bei sizeof macht, gehören ja nicht zum Operator. Man siehts so aber tatsächlich recht selten.



  • Erstmal vielen Dank für die schnellen Antworten.
    Funktioniert ja prima hier.
    @_matze
    nach Konvertierung zu hex funktioniert alles.

    @asc
    Danke für deine Tips bzgl. Formatierung.
    Die include Dateien sind eigentlich nicht für diese Zeilen gewesen.
    Habe sie aber aus Bequemlichkeit stehen lassen 😮

    -- sizeof b -- sizeof(b)
    Erste Variante steht in meinem c++ für Dummies Buch
    Mir kam die Schreibweise auch schon ungewöhnlich vor.

    Bzgl. namespace.....werde deinen Rat befolgen


Anmelden zum Antworten