Ich denke immer, wenn ich diese drei Variablen deklariere, haben sie alle den Wert 0
int column, row, index = 0;
Aber ich finde, dass nur der Index gleich Null ist und die anderen wie 844553 und 2423445 Junk sind.
Wie kann ich alle diese Variablen auf Null initialisieren, ohne jede Variable in einer neuen Zeile zu deklarieren?
int* a, b, c;
macht nicht das, wie es aussieht).=0
für jede in ihren Definitionen. Und wenn Sie wirklich viele Variablen möchten, versuchen Sie es mit einem Array:int a[10]={0}
Initialisiert jedesa[i]
für Sie auf 0.Antworten:
quelle
Wenn Sie erklären:
Nur der Index wird auf Null gesetzt.
Sie können jedoch Folgendes tun:
Aber ich persönlich bevorzuge Folgendes, worauf hingewiesen wurde.
Meiner Ansicht nach ist es eine besser lesbare Form.
oder
quelle
bool previousInputValue, presentInputValue;
) oder ob sie jetzt zufällig vom selben Typ sind, aber nicht wirklich sein müssen (uint8_t height, width;
möglicherweiseuint8_t height; uint16_t width;
in der Zukunft werden und solltenuint8_t height; uint8_t width;
zunächst).uint8_t height; uint16_t width;
stattuint8_t height, width;
10 Zeichen in der Zukunft spart. :-) du kannst es natürlich machen wie du willst. Stellen Sie einfach sicher, dass Sie es leicht lesbar machen. Die letzte Form ist also die expliziteste.int presentValue = 0; typeof(presentValue) previousValue = presentValue;
, aber ich glaube, dass diestypeof()
eine nicht standardmäßige GCC-Erweiterung ist.Wie @Josh sagte, lautet die richtige Antwort:
Sie müssen mit Zeigern auf dasselbe achten. Dies:
Ist äquivalent zu:
quelle
unsigned long x, y;
,x
als deklariert alsunsigned long
abery
als gerechtunsigned
, akaunsigned int
! Das ist genau das gleiche! </ rant>int *a
Mittel,*a
das einenint
Wert darstellt.void* a
kompilieren undvoid *a, b, c
nicht kompilieren . Diese Rationalisierung funktioniert bei mir.Wenn Sie eine Variable / ein Objekt pro Zeile deklarieren, wird nicht nur dieses Problem gelöst, sondern der Code wird auch klarer und es werden dumme Fehler beim Deklarieren von Zeigern vermieden.
Um Ihre Frage jedoch direkt zu beantworten, müssen Sie jede Variable explizit auf 0 initialisieren.
int a = 0, b = 0, c = 0;
.quelle
Beachten Sie, dass dieses Formular auch mit benutzerdefinierten Typen funktioniert, insbesondere wenn deren Konstruktoren mehr als ein Argument verwenden.
quelle
auto
... behebt): int Spalte { 0 } , Zeile { 0 } , Index { 0 } ;Ab 2k18 können Sie strukturierte Bindungen verwenden :
Demo
quelle
Mögliche Ansätze:
memset
oder{0}
das Array.struct
undmemset
oder haben Sie einen Konstruktor, der sie auf Null initialisiert.quelle
Ich würde dies nicht empfehlen, aber wenn Sie es wirklich mögen, eine Zeile zu sein und nur einmal 0 zu schreiben, können Sie dies auch tun:
quelle
Wie bereits erwähnt, können Sie ab C ++ 17 strukturierte Bindungen für mehrere Variablenzuweisungen verwenden.
Dies mit Kombinieren
std::array
und Template - Argument Abzug wir eine Funktion , dass ein Wert zugewiesen einer beliebigen Anzahl von Variablen schreiben kann , ohne Wiederholung der Art oder Wert .Demo
quelle
Wenn Sie eine Variable deklarieren, ohne sie zu initialisieren, wird eine Zufallszahl aus dem Speicher ausgewählt und die Variable auf diesen Wert initialisiert.
quelle