Sie erhalten dieses Verhalten, weil int array [ROW][COLUMN] = {1};
dies nicht bedeutet, dass "alle Elemente auf eins gesetzt werden". Lassen Sie mich versuchen, Schritt für Schritt zu erklären, wie dies funktioniert.
Die explizite, zu klare Methode zum Initialisieren Ihres Arrays lautet wie folgt:
#define ROW 2
#define COLUMN 2
int array [ROW][COLUMN] =
{
{0, 0},
{0, 0}
};
Mit C können Sie jedoch einige Elemente in einem Array (oder einer Struktur / Vereinigung) weglassen. Sie könnten zum Beispiel schreiben:
int array [ROW][COLUMN] =
{
{1, 2}
};
Das heißt, initialisieren Sie die ersten Elemente mit 1 und 2 und den Rest der Elemente "als ob sie eine statische Speicherdauer hätten". In C gibt es eine Regel, die besagt, dass alle Objekte mit statischer Speicherdauer, die vom Programmierer nicht explizit initialisiert werden, auf Null gesetzt werden müssen.
Im obigen Beispiel wird die erste Zeile auf 1,2 und die nächste auf 0,0 gesetzt, da wir ihnen keine expliziten Werte gegeben haben.
Als nächstes gibt es in C eine Regel, die einen lockeren Klammerstil zulässt. Das erste Beispiel könnte genauso gut geschrieben werden wie
int array [ROW][COLUMN] = {0, 0, 0, 0};
Obwohl dies natürlich ein schlechter Stil ist, ist es schwieriger zu lesen und zu verstehen. Diese Regel ist jedoch praktisch, da wir damit schreiben können
int array [ROW][COLUMN] = {0};
Dies bedeutet: "Initialisieren Sie die allererste Spalte in der ersten Zeile auf 0 und alle anderen Elemente so, als ob sie eine statische Speicherdauer hätten, dh setzen Sie sie auf Null."
Deshalb, wenn Sie es versuchen
int array [ROW][COLUMN] = {1};
es bedeutet "initialisiere die allererste Spalte in der ersten Zeile auf 1 und setze alle anderen Elemente auf Null".