Definieren integer (int); Was ist der default-Wert?
int i;
int data[5] = {0};
data[0] = i;
Was ist der Wert in data[0]?
Auch, was ist der Sinn dieser Zeile?
if (!data[0]) { ... }
Du musst angemeldet sein, um einen Kommentar abzugeben.
int i;
int data[5] = {0};
data[0] = i;
Was ist der Wert in data[0]?
Auch, was ist der Sinn dieser Zeile?
if (!data[0]) { ... }
Du musst angemeldet sein, um einen Kommentar abzugeben.
In den meisten Fällen, es gibt keine "default" - Wert für eine
int
Objekt.Wenn Sie erklären
int i;
als eine (nicht-statische) lokale variable innerhalb einer Funktion, es hat einen unbestimmten Wert. Es ist nicht initialisiert und Sie können es nicht verwenden, bis Sie schreiben ein Gültiger Wert zu.Es ist eine gute Angewohnheit, in zu erhalten, um explizit initialisiert ein beliebiges Objekt, wenn Sie ihn deklarieren.
int
Typ", nichtint
Objekt, richtig? 🙂int x[5];for(int i = 0; i < 5; i++) {printf("%d", x[i]);}
-858993460-858993460-858993460-858993460-858993460
. Es ist wahrscheinlich, dass Ihr compiler mit null initialisiert Speicher für Sie. Mine, Visual C++ mit standard-debug-build-Einstellungen, ist pre-Initialisierung auf nicht initialisierte Objekte mit0xcc
so dass Sie leichter erkannt.Es hängt davon ab, wo der code geschrieben wird. Bedenken Sie:
Zugewiesene Wert
data[0]
imfunc1()
ist vollständig deterministisch; es muss null sein (vorausgesetzt, dass keine anderen Aufgaben gestört haben die Werte der globalen Variableni
unddata
).Dagegen den Wert, der im
func2()
ist völlig unbestimmt; Sie kann nicht sicher sagen, welcher Wert zugewiesen wirddata[0]
weil kein Wert wurde zuverlässig zugeordneti
in der Funktion. Es wird wahrscheinlich ein Wert auf dem Stapel von einigen früheren Funktion aufrufen, aber das hängt von der compiler und das Programm und ist auch nicht "implementation defined', es ist reines Undefiniertes Verhalten.Du auch Fragen "Was ist der Sinn davon?"
Den '
!
' - operator führt eine logische Invertierung des Wertes auf die es angewendet wird: es ordnet null und eins, und Karten alle nicht-null-Wert auf null. Die Gesamt-Bedingung ergibt true, wenn der Ausdruck einen Wert ungleich null. Also, wenndata[0]
0 ist, wird!data[0]
Karten 1 und der code im block wird ausgeführt,; wenndata[0]
ist nicht 0,!data[0]
maps zu 0 und der code im block wird nicht ausgeführt.Es ist eine Häufig verwendete Redewendung, denn es ist kürzer, als die alternative:
func1()
,i
ist eine Globale variable und Globale (int
) Variablen werden initialisiert auf 0, es sei denn, es gibt einige andere Initialisierung angegeben. (Die Geschichte ist etwas Komplex, für einige andere Arten, aber alle globalen Variablen initialisiert, entweder einen festgelegten Wert oder 'null'.) Nun, wenn ein anderer code geändert hat, der Wert deri
, dann wird der Wert zugewiesendata[0]
wird nicht unbedingt 0 sein, aber der Wert ist immer noch definiert und nicht unbestimmt.Wenn ein integer nicht initialisiert, ist Ihr Wert undefiniert, da je C
Da Sie habe den
={0};
, das gesamte array wird mit Nullen gefüllt. Wenn diese definiert ist außerhalb jeder Funktion, wäre es initialisiert mit Nullen auch ohne Initialisierung.if (!data[x])
entsprichtif (data[x] == 0)
.data[0]
wird anschließend festgelegti
. Die OP läuft darauf hinaus, zu Fragen, was der Wert voni
ist, da es noch nicht zugewiesen ist.wenn ein integer ist Global definiert, dann ist es automatisch mit null initialisiert
aber wenn es lokal ist dann Müll enthält den Wert, bis und es sei denn, itis bestimmten Wert
//Datei " ein.c'
//test Ergebnisse