Um einen 2D-Array zu initialisieren, in der Regel können wir es wie folgt tun:Unexpected Initializing Ergebnis von 2D-Array
int matrix[3][4] = { {1,1,1,1}, {2,2,2,2}, {3,3,3,3} };
Aber, wie ich es mit verschiedenen Kombinationen testet die folgenden Codes haben aus meiner Erwartung kompilieren :
int matrix[3][4] = {1,2,3,4,5,6,7};
Wenn ich die Ausgabe in einer 2D-Tabellenform drucken, erhalte ich:
1,2,3,4,
5,6,7,0,
0,0,0,0,
Ich verstehe, warum der Rest der Werte Nullen sind.
Meine Frage ist: Ist dies eine der legitimen Möglichkeiten, 2D-Array zu initialisieren, indem man annimmt, dass die Zahlen, die die Grenzen einer Zeile überschreiten, immer zur nächsten Zeile "fließen"? Oder ist das eine weitere Falle, die ich in C++ vermeiden sollte?
Das ist völlig legitim. Es ist seit der Standardisierung Teil von C und C++. Obwohl Sie vielleicht denken, dass die explizitere Version einfacher zu lesen ist. –
@AlanStokes Danke für Ihre Antwort, ich war irgendwie überrascht zu wissen, dass es zwar legitim ist, weil ich dachte, es kompiliert, weil C++ die Grenzen nicht überprüft, und die Nummer nur auf dem nächsten verfügbaren Speicher sitzen. Oder kann ich das sagen, da der nächste verfügbare Speicher auch als Teil des Arrays "reserviert" ist. Es ist in Ordnung, dies zu tun? – user3437460
@ user3437460 Wie kann der Compiler einen der Werte auf 0 setzen, wenn er die Grenzen nicht überprüft? Wenn Sie die Grenzen überschreiten, führt dies zu einem Compilerfehler. – user6276096