Grundlegendes zum Überladen von Stream-Operatoren für Char-Zeiger
Beim Drucken eines Zeichenzeigers mit printf() bestimmt der Konvertierungsspezifizierer, ob die Adresse oder die Zeichenfolge ausgegeben wird, z. B. %u für die Adresse oder %s für die Zeichenfolge. Wie entscheidet es jedoch bei C-Streams und cout, welches ausgegeben werden soll?
Betrachten Sie den folgenden Code:
<code class="cpp">char ch = 'a'; char *cptr = &ch; cout << cptr << endl;
In diesem Beispiel versucht cout, cptr als Zeichenfolge zu interpretieren. Um die Adresse von ch mit cout auszugeben, muss eine Konvertierung angewendet werden, um diese Mehrdeutigkeit aufzulösen.
Lösung: Umwandlung in einen Void-Zeiger
Die bevorzugte Methode zum Erhalten eines Die Adresse mit cout erfolgt durch Typumwandlung. Der richtige Ansatz ist:
<code class="cpp">cout << static_cast<void *>(cptr) << endl;</code>
Indem wir cptr in void * umwandeln, zwingen wir cout, die entsprechende Überladung auszuführen, die einen void-Zeiger (ostream& Operator<< (ostream& o, const void *p.) benötigt )). Dadurch wird sichergestellt, dass die Adresse wie vorgesehen gedruckt wird.
Das obige ist der detaillierte Inhalt vonWie entscheidet „cout', ob die Adresse oder die Zeichenfolge gedruckt wird, wenn Sie einen Zeichenzeiger übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!