Heim > Backend-Entwicklung > C++ > Warum drucken nicht initialisierte Variablen in C scheinbar zufällige Werte?

Warum drucken nicht initialisierte Variablen in C scheinbar zufällige Werte?

DDD
Freigeben: 2024-11-09 08:29:02
Original
434 Leute haben es durchsucht

Why do uninitialized variables in C   print seemingly random values?

Eintauchen in das Rätsel nicht initialisierter Variablen: Warum seltsame Werte entstehen

Im Bereich der Codierung können nicht initialisierte Variablen verwirrende Ergebnisse hervorrufen. Ein solches Rätsel entsteht beim Versuch, solche Variablen zu drucken, was zu rätselhaften numerischen Ausgaben führt.

Um dieses Rätsel zu lösen, untersuchen wir den bereitgestellten C-Code:

int var;
cout << var << endl;
Nach dem Login kopieren

Er deklariert eine ganzzahlige Variable var ohne Anfangswert. Beim Drucken von var wird eine beliebige Zahl wie 2514932 ausgegeben. Dies liegt daran, dass Variablen ohne Anfangswerte Mülldaten enthalten, die im Speicher gespeicherte Zufallsbits darstellen.

Ähnlicherweise tritt beim Drucken einer nicht initialisierten Doppelvariablen var ein ebenso unerwartetes Ereignis auf Es kann ein Wert wie 1,23769e-307 entstehen. Auch dies ergibt sich aus der Undefiniertheit seines ursprünglichen Inhalts.

Die Gefahren undefinierten Verhaltens

Das grundlegende Problem liegt im Konzept des „undefinierten Verhaltens“. In C verstößt der Zugriff auf nicht initialisierte Variablen gegen diese Regel, was unvorhersehbare Folgen hat. Der Compiler ist nicht verpflichtet, mit solchen Situationen elegant umzugehen und im Wesentlichen zu sagen: „Tu, was du willst; ich entbinde mich von jeglicher Verantwortung.“

Konsequenzen in der Praxis

Lassen Sie uns Veranschaulichen Sie dies anhand eines Beispiels aus der Praxis:

#include <iostream>

const char* test()
{
    bool b; // uninitialized

    switch (b) // undefined behavior!
    {
    case false:
        return "false";      // garbage was zero (zero is false)
    case true:
        return "true";       // garbage was non-zero (non-zero is true)
    default:
        return "impossible"; // options are exhausted, this must be impossible...
    }
}

int main()
{
    std::cout << test() << std::endl;
}
Nach dem Login kopieren

Intuitiv könnte man erwarten, dass der Funktionstest niemals „unmöglich“ zurückgibt, da beide Optionen für wahre und falsche Werte abgedeckt sind. Undefiniertes Verhalten kann jedoch das Unmögliche möglich machen. Das Kompilieren des Codes mit g -02 kann dieses Phänomen demonstrieren.

Schlussfolgerung

Um das unvorhersehbare Verhalten zu vermeiden, das mit nicht initialisierten Variablen verbunden ist, ist es unbedingt erforderlich, sie mit geeigneten Werten zu initialisieren . Diese einfache Vorgehensweise stellt sicher, dass Ihr Code nicht in den trüben Bereich undefinierten Verhaltens eintaucht und Ihre Programme weiterhin wie vorgesehen funktionieren.

Das obige ist der detaillierte Inhalt vonWarum drucken nicht initialisierte Variablen in C scheinbar zufällige Werte?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage