Heim  >  Artikel  >  Backend-Entwicklung  >  Wie entscheidet „cout“, ob die Adresse oder die Zeichenfolge gedruckt wird, wenn Sie einen Zeichenzeiger übergeben?

Wie entscheidet „cout“, ob die Adresse oder die Zeichenfolge gedruckt wird, wenn Sie einen Zeichenzeiger übergeben?

Susan Sarandon
Susan SarandonOriginal
2024-11-04 10:23:31232Durchsuche

How does `cout` decide whether to print the address or the string when you pass a character pointer?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn