*char
-
ich hab da ne n00bfrage:
#include <iostream> using namespace std; int main() { char * pc = "Hello world!"; cout << "Char (Wert):\t" << *pc << endl; cout << "Char (Adresse):\t" << pc << endl; cin.get(); return 0; }Ausgabe:
*pc ist H
pc ist Hello world!wie kann das sein, schließlich hab ich immer gelernt, dass man zeiger immer nur auf einen wert (int) spetialisiert und dann (ohne
die adresse bekommt... 
ist das bei char anders?
-
Bei deinem C-String holst du mit *pc den ersten Buchstaben und mit *(pc+i) den i-ten Buchstaben im String.
Die Adresse deines Strings kriegst mit &pc .
Im Artikel-Forum gibt's auch einen Artikel zu Zeigern.
-
IpOperator schrieb:
ist das bei char anders?
Jein. Es ist so, dass der überladene operator<< für char*-Zeiger eben nicht die Adresse ausgibt. Der Einfachheit halber dereferenziert und inkrementiert der op<< den char*Zeiger solange bis er die Nullterminierung findet (\0).
Beispiel: So könnte der überladene op<< im Groben für char*-Zeiger definiert sein:
std::ostream& operator<<(std::ostream& os, const char* cp) { while(*cp != '\0') os << *cp++; return os; }Um dennoch die Adresse eines char*-Zeigers zu bekommen, musst du diesen in einen void* Zeiger casten.
Beispiel:std::cout << static_cast<void*>(cp); // cp ist hier ein Zeiger auf char.Gruß Caipi
-
George_ schrieb:
Bei deinem C-String holst du mit *pc den ersten Buchstaben und mit *(pc+i) den i-ten Buchstaben im String.
Die Adresse deines Strings kriegst mit &pc .
Im Artikel-Forum gibt's auch einen Artikel zu Zeigern.Mit &pc bekommst du die Adresse des Zeigers! Nicht die Adresse des Wertes, den der Zeiger speichert.
Gruß Caipi
-
danke zur schnellen antwort
