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