Heim > Backend-Entwicklung > C++ > Warum gibt „25' 1 „5' in C aus?

Warum gibt „25' 1 „5' in C aus?

Patricia Arquette
Freigeben: 2024-11-01 14:38:02
Original
697 Leute haben es durchsucht

Why Does

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;
Nach dem Login kopieren

}

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage