「すべてのアイテムを1つに設定する」という意味でint array [ROW][COLUMN] = {1};
はないため、この動作が発生します。これがどのように機能するかを段階的に説明してみましょう。
配列を初期化する明示的で過度に明確な方法は、次のようになります。
#define ROW 2
#define COLUMN 2
int array [ROW][COLUMN] =
{
{0, 0},
{0, 0}
};
ただし、Cを使用すると、配列(または構造体/共用体)内の一部の項目を除外できます。たとえば、次のように書くことができます。
int array [ROW][COLUMN] =
{
{1, 2}
};
つまり、最初の要素を1と2に初期化し、残りの要素を「静的な保存期間があるかのように」初期化します。Cには、プログラマーによって明示的に初期化されていない静的ストレージ期間のすべてのオブジェクトをゼロに設定する必要があるという規則があります。
したがって、上記の例では、明示的な値を指定しなかったため、最初の行は1,2に設定され、次の行は0,0に設定されます。
次に、Cには緩いブレーススタイルを許可するルールがあります。最初の例は、次のように書くこともできます。
int array [ROW][COLUMN] = {0, 0, 0, 0};
もちろんこれは貧弱なスタイルですが、読んだり理解したりするのは難しいです。しかし、このルールは私たちが書くことができるので便利です
int array [ROW][COLUMN] = {0};
つまり、「最初の行の最初の列を0に初期化し、他のすべてのアイテムを静的な保存期間があるかのように初期化します。つまり、ゼロに設定します。」
したがって、あなたがしようとすると
int array [ROW][COLUMN] = {1};
これは、「最初の行の最初の列を1に初期化し、他のすべての項目をゼロに設定する」ことを意味します。