[Newbie] Adressausgabe einer char-Variabel
-
Hi!
Ich verstehe hier nicht, warum mir der Zeiger zeig2 bei
der Ausgabe in der Konsole nicht die Adresse von c anzeigt,
so wie ich es erwarten würde und es auch bei zeig1 passiert,
sondern "G" + ein Sonderzeichen? Ich übergebe mit &c doch richtig,
da es kein Array sondern nur ein char ist.../* Beispiel für Verwendung einer Referenz */ #include <iostream> using namespace std; int main() { int x = 5; int &ref1 = x; int *zeig1 = &x; char c = 'G'; char &ref2 = c; char *zeig2 = &c; cout << "\tReferenz auf x: " << ref1; cout << "\tReferenz auf c: " << ref2 << endl; cout << "\tZeiger auf x: " << zeig1; cout << "\tZeiger auf c: " << zeig2 << endl; return 0; }
-
der operator << ist für die meisten Zeiger ganz ok, aber für char-Zeiger wurde er überladen mit einer anderen Bedeutung. Da interpretiert er die Adrresse als Zeiger aufs erste Element eines Strings, der mit char(0) aufhört.
void *zeig3 = zeig2; cout << "\tZeiger auf c: " << zeig3 << endl;
-
[quote="volkard"]der operator << ist für die meisten Zeiger ganz ok[cpp]
Gibt es eine weitere Ausnahme?
-
Exception# schrieb:
Gibt es eine weitere Ausnahme?
char*, die noch mit const oder volatile verziert werden (ok, kleinlich)
und natürlich Methodenzeiger.
-
MSVC interpretiert IIRC auch
(cv) signed char*als String-Zeiger. Weiss aber nicht ob das auch standardkonform ist.
-
volkard schrieb:
Exception# schrieb:
Gibt es eine weitere Ausnahme?
char*, die noch mit const oder volatile verziert werden (ok, kleinlich)
und natürlich Methodenzeiger.Zeiger auf nicht-statische Memberfunktionen sind keine Zeiger. Funktionszeiger wären als Ausnahme mögliche: für die meisten existieren keine Überladungen, sondern nur für solche, die Inserter sind.
hustbaer schrieb:
MSVC interpretiert IIRC auch
(cv) signed char*als String-Zeiger. Weiss aber nicht ob das auch standardkonform ist.Das ist so vorgeschrieben (27.6.2.5.4/2).