Массив как матрица
Простой способ обращения к массиву как к матрице. Аналогичным способом можно обращаться к элементам данных любой размерности.
#include <
stdio.h>
#include <
stdlib.h>
#define ROWS 10 // Количество строк в матрице
#define COLUMNS 10 // Количество столбцов в матрице
/**
* Функция возвращает элемент по его позиции в матрице.
* dynamic_array - указатель на динамический массив,
* row - номер строки,
* column - номер колонки,
* Возвращаемое значение:
* - содержание элемента матрицы.
*/
int get_element(int *dynamic_array, int row, int column);
void main(void)
{
// Создаем динамический массив.
int *dynamic_array = (int*)calloc(COLUMNS * ROWS, sizeof(int));
// Заполняем массив значениями по порядку.
for (int i = 0; i <
COLUMNS * ROWS; i++)
{
dynamic_array[i] = i;
}
// Выводим матрицу построчно.
for (int i = 0; i <
ROWS; i++)
{
for (int j = 0; j <
COLUMNS; j++)
{
printf("%3d", get_element(dynamic_array, i, j));
}
printf("\n");
}
free(dynamic_array);
}
int get_element(int *dynamic_array, int row, int column)
{
/*
Умножаем размер строки на количество отсчитанных строк,
и добавляем текущую позицию в строке. Получившееся число
указывает на позицию в линейном массиве. Добавляем смещение
к указателю и получаем адрес значения в динамическом массиве.
Извлекаем значение по указателю.
*/
return *(dynamic_array + COLUMNS * row + column);
}