СИ двумерные массивы
Как работает scanf("%d", (a + i*m + j));?
Если a-массив, то как мы можем к нему прибавить im+j
// Выделение памяти
a = (int*)malloc(n*m * sizeof(int));
// Ввод элементов массива
for (i = 0; i<n; i++) // цикл по строкам
{
for (j = 0; j<m; j++) // цикл по столбцам
{
printf("a[%d][%d] = ", i, j);
scanf("%d", (a + i*m + j));
}
}
Ответы (1 шт):
Автор решения: Mikhailo
→ Ссылка
Двумерный массив
int a[M][N];
располагается в памяти одним блоком построчно. К элементу a[i][j] молжно обратиться и как к &a[0][0]+i*N+j - пропускаем i строк по N элементов и в строке обращаемся к j-му элементу.
То же можно сымитировать динамически, выделяя достаточную память (для M*N элементов) и обращаясь к a+i*N+j, потому что a и есть указатель на самый первый элемент.