Frage

Wenn ein C-Programm startet und Variablen an Speicherstellen zugeordnet sind, wird der C-Standard sagen, wenn dieser Wert initialisiert wird?

// global variables
int a;
int b = 0;
static int c;

In dem obigen Code, ‚b‘ wird auf 0 initialisiert werden, was der Anfangswert von ‚a‘ ist? Ist ‚c‘ anders, da es zu diesem Modul statisch ist?

War es hilfreich?

Lösung

Da Sie ausdrücklich erwähnt global Variablen. Im Falle von globalen Variablen, ob sie static deklariert sind oder nicht, werden sie auf 0 initialisiert werden

Lokal Variablen auf der anderen Seite werden undefined (es sei denn, sie static deklariert werden, wobei in diesem Fall auch sie auf 0 initialisiert werden - dank Tyler McHenry). Übersetzt bedeutet das, dass Sie nicht auf die sie enthalten, eine bestimmte Sache verlassen können -. Sie werden nur Müll, was zufällig enthalten an dieser Stelle war bereits im Speicher, die unterschiedlich sein können von Lauf Lauf

Andere Tipps

  

Edit:. Folgende gilt nur für lokale Variablen - nicht Globals

Der Anfangswert einer Variablen ist nicht definiert. In einigen Sprachen im Speicher eines Variablen Standort wird bei der Deklaration zero'd, sondern in C (und C ++ als auch) eine nicht initialisierte Variable enthält unabhängig von Müll, der zu dieser Zeit an diesem Ort lebt.

So ist die beste Art und Weise, daran zu denken ist, dass eine nicht initialisierte Variable wird höchstwahrscheinlich Müll enthalten und nicht definiertes Verhalten haben.

a wird gleich Null sein, und c auch, wenn sie global sind und nicht explizit initialisiert. Dies gilt auch für die lokale statische Variablen.

Nur lokale nicht-statische Variablen werden nicht initialisiert. Auch Speicher mit malloc ist nicht initialisiert.

Siehe here für Regeln von Initialisierungen und Zuordnung in C für die verschiedenen Objekte.

Ich bin die Eingabe viel zu langsam an diesem Morgen. Drei Menschen tauchte in schnell wie ich antworten, also habe ich die meisten meiner Post entfernt. Der Link fand ich war kurz und knapp, so dass ich bin Entsendung dass sowieso: Wikipedia auf „nicht initialisierte Variable“ für eine Diskussion über die grundlegenden Fragen.

Ein kurzer Test zeigt a und c 0 sein.

int a;
static int c;
int main() {
    printf("%d %d\n", a, c);
    return 0;
}

Die Lage a (c) zur Übersetzungszeit bestimmt werden; das heißt, sie sind weder auf dem Stapel noch in einem Speicherintervall von malloc zurück setzen. Ich denke, der C-Standard, sagt sie auf 0 in allen Fällen initialisiert ist, dann.

Ich bin 99,9% zuversichtlich in Bezug auf c und 98% zuversichtlich in Bezug auf a. Das Schlüsselwort static, im Zusammenhang mit der globalen Variablen, wirklich analog private in (sagen wir) C ++ und Java. Es geht um Sichtbarkeit, nicht Lagerort

Was Andrew Hare sagt über nicht initialisierten Variablen ist für gespeicherte Daten auf dem Stack oder in malloc'd Speicher wahr. Nicht so für statisch gespeicherten Variablen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top