Se obtiene este comportamiento, ya que int array [ROW][COLUMN] = {1};
lo hace no media "set todos los artículos a uno". Permítanme intentar explicar cómo funciona esto paso a paso.
La forma explícita y demasiado clara de inicializar su matriz sería así:
#define ROW 2
#define COLUMN 2
int array [ROW][COLUMN] =
{
{0, 0},
{0, 0}
};
Sin embargo, C le permite omitir algunos de los elementos de una matriz (o estructura / unión). Por ejemplo, podría escribir:
int array [ROW][COLUMN] =
{
{1, 2}
};
Es decir, inicializar los primeros elementos en 1 y 2, y el resto de elementos "como si tuvieran una duración de almacenamiento estático". Hay una regla en C que dice que todos los objetos de duración de almacenamiento estático, que no sean inicializados explícitamente por el programador, deben establecerse en cero.
Entonces, en el ejemplo anterior, la primera fila se establece en 1,2 y la siguiente en 0,0 ya que no les dimos ningún valor explícito.
A continuación, hay una regla en C que permite un estilo de corsé laxo. El primer ejemplo también podría escribirse como
int array [ROW][COLUMN] = {0, 0, 0, 0};
aunque, por supuesto, este es un estilo deficiente, es más difícil de leer y comprender. Pero esta regla es conveniente, porque nos permite escribir
int array [ROW][COLUMN] = {0};
lo que significa: "inicializar la primera columna de la primera fila en 0, y todos los demás elementos como si tuvieran una duración de almacenamiento estática, es decir, ponerlos en cero".
por lo tanto, si intentas
int array [ROW][COLUMN] = {1};
significa "inicializar la primera columna de la primera fila en 1 y establecer todos los demás elementos en cero".