MyTetra Share
Делитесь знаниями!
Как передать в функцию двумерный массив, размер которого известен
Время создания: 10.01.2011 12:49
Текстовые метки: c, c++, массив
Раздел: Компьютер - Программирование - Язык C (Си)
Запись: xintrea/mytetra_syncro/master/base/0000003382/text.html на raw.github.com

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

}



Передача динамического массива в функцию выполняется другими методами.


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