MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Как передать в функцию двумерный массив, размер которого известен
10.01.2011
12:49
Текстовые метки: c, c++, массив
Раздел: Компьютер - Программирование - Язык C

Передать статический двумерный массив в функцию так, чтобы можно было получать доступ к его элементам через синтаксис 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_X 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];

}

Так же в этом разделе:
← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования