Передать статический двумерный массив в функцию так, чтобы можно было получать доступ к его элементам через синтаксис a[x][y] можно только используя технику динамических массивов.
Однако есть более простой способ доступа к данным массива путем передачи указателя на первый элемент двумерного массива. При этом двумерный массив внутри функции будет выглядеть как одномерный массив указателей на одномерные массивы, и доступ к элементам нужно осуществлять с помощью конструкции [y*размерность_x+x].
Вот первый пример, как можно передавать двумерный массив:
void fun(int **array, int sizey, int sizex)
{
int *p_array=(int*)array;
int x=1, y=3;
int value;
value=p_array[ y * sizex + x ]; // [ x ][ y ]
}
void main(void)
{
int table[5][4];
fun((int**)table, 5, 4);
}
Как видно, синтаксис неудобен, и внутри функции fun() для доступа к элементам используется создание дополнительного указателя.
Есть более простой вариант для передачи двумерных массивов, размер которых заранее известен:
#define TABLE_SIZE_X 5
#define TABLE_SIZE_Y 4
// Прототип
fun(int tbl[TABLE_SIZE_X][TABLE_SIZE_Y]);
// Основная функция
void main(void)
{
int table[TABLE_SIZE_X][TABLE_SIZE_Y];
fun(table);
}
// Реализация
fun(int tbl[TABLE_SIZE_X][TABLE_SIZE_Y])
{
int value;
value=tbl[1][3];
}
Передача динамического массива в функцию выполняется другими методами.
|