Heim > Artikel > Backend-Entwicklung > Warum gibt „25“ 1 „5“ in C aus?
Die unerwartete Verkettung von Zeichenfolgen und Zahlen in C: Erkundung von „456“ 1
Der Codeausschnitt
< pre>#include
int main()
{
std::cout << "25"+1; return 0;
}
wirft eine verwirrende Frage auf: Warum? Der Ausdruck „25“ 1 gibt „5“ anstelle einer erwarteten „26“ aus? Um dieses Rätsel zu lösen, tauchen wir in das Innenleben dieses Codes ein.
In C werden String-Literale wie „25“ nicht als echte Strings, sondern als Zeichen-Arrays behandelt. Im angegebenen Beispiel entspricht „25“ einem Zeichenarray {'2', '5', ' '}, wobei ' ' der Nullterminator ist, der das Ende einer Zeichenfolge angibt.
Wann Wird ein Array in einem Ausdruck ohne explizite Umwandlung verwendet, zerfällt es automatisch in einen Zeiger auf sein erstes Element. „25“ zerfällt also effektiv in & „25“[0], einen Zeiger auf das Zeichen „2“. Das Hinzufügen von 1 zu diesem Zeiger erhöht ihn so, dass er auf das nächste Zeichen zeigt, nämlich „5“.
Die Darstellung wird dicker, wenn wir das Verhalten von std::ostream, dem Typ von std::cout, betrachten. Diese Klasse kann sowohl ein char als auch ein const char (in das char* zerfällt) akzeptieren und sie als nullterminierte Zeichenfolgen interpretieren. Wenn es daher &"25"[0] empfängt, gibt es die Zeichen von diesem Zeiger aus, bis es auf den Nullterminator trifft, was dazu führt, dass „5“ als Ausgabe angezeigt wird.
Das obige ist der detaillierte Inhalt vonWarum gibt „25“ 1 „5“ in C aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!