Frage zu char-Pointer
-
Hallo,
ich habe eine Frage zu char-Pointer. Es geht um folgenden Code:#include <iostream> using namespace std; int main() { char c[]={'H','a','l','l','o'};//"Hallo"; char *ptr=c; cout << ptr<<endl; cout << *ptr<<endl; int a[]={5,1}; int *z=a; cout <<z<<endl; cout <<*z<<endl; }Wieso wird bei cout << ptr<<endl; "Hallo" ausgegeben? Normalerweise muss doch die Anfangsadresse des Arrays c angezeigt werden. Grundsätzlich scheint es nicht einfach zu sein, dass man die Anfangsadresse von c rausbekommt.
cout << &c<<endl;bringt es auch nicht.
-
altlast aus C. zeiger auf chars sind c-strings und werden auch als solche ausgegeben. wenn du die adresse des ersten objektes willst musst du z.b. nach void* casten.
-
Dein C-String in c ist aber nicht Nullterminiert. Da fehlt noch ein
'\0'als letztes Element im Array.
Erst dann ist es wie das Stringliteral "Hallo".
-
ungefähr so
cout << static_cast<void*>(ptr) << endl;ein char* behandelt so ein stream-Operator wie eine Zeichenkette (die, auf die er zeigt). Bei einem void* bekommt du die Adresse angezeigt. Für andere Adresse muss man diesen Cast auch nicht selbst durchführen. Das passiert implizit. Aber für char* gibt's eben eine speziellere Überladung/Sonderbehandlung. In 99% der Fälle will man einfach nicht die Adresse sehen, sondern eine Zeichenkette. Bissel inkonsistent, aber tendenziell bequem.
-
Vielen Dank!!