Как работает заполнение одномерного массива по типу двумерного, если данные по идеи никак не меняются(добавляются или изменяются)?

Корректное заполнение одномерного массива в стиле двумерного массива может быть достигнуто путем использования преобразования индексов в соответствии с формулой, которая будет зависеть от размеров двумерного массива. Это может быть полезно, например, если вы хотите работать с одномерным массивом, но иметь удобный доступ к элементам, как будто они находятся в двумерной структуре.

Для наглядности рассмотрим пример. Допустим, у нас есть двумерный массив размером m на n, и мы хотим преобразовать его в одномерный массив размером m * n, назовем его array1D. Исходный двумерный массив array2D может выглядеть следующим образом:

int array2D[m][n] = {
   {1, 2, 3},
   {4, 5, 6},
   {7, 8, 9}
};

Мы можем заполнить одномерный массив следующим образом:

int array1D[m * n];

for (int i = 0; i < m; i++) {
   for (int j = 0; j < n; j++) {
      array1D[i * n + j] = array2D[i][j];
   }
}

Здесь мы используем два вложенных цикла для итерации по всем элементам двумерного массива array2D. В каждой итерации мы присваиваем значение элемента array2D[i][j] элементу array1D[i * n + j].

Результирующий одномерный массив будет содержать значения элементов двумерного массива, но они будут расположены последовательно друг за другом в памяти. То есть результат будет выглядеть следующим образом:

int array1D[m * n] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

Такой подход к заполнению одномерного массива в стиле двумерного массива может быть полезен в тех случаях, когда у вас есть существующий код, ожидающий одномерный массив, но вы хотите работать с данными как с двумерным массивом для удобства.