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
DDDOriginal
2024-11-09 08:29:02465Durchsuche

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;

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;
}

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!

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