Акции

Скидка до 40% на создание Бизнес-сайта или Интернет-магазина при заключении договора на поддержку и продвижение!
Подробнее

Новости

2013-06-21

Программирование на языке C. Передача многомерных массивов функциям

При передаче многомерных массивов функциям вы должны также передать дополнительную информацию о размерности массива, чтобы избежать неправильной адресации. В случае двухмерного массива компилятору нужно знать количество столбцов, чтобы вычислять адреса элементов вначале каждой строки.

Вас интересует вебдизайн? Предлагаем Вам посетить http://rosbrs.ru, обучение компьютерной графикездесь представлено детально и подробно. Начните обучение вместе с rosbrs.ru.

Этот факт имеет важные последствия при объявлении многомерных массивов как параметров функции. Определив символические константы ROWS и COL как количества строк и столбцов в двухмерном массиве, вы можете объявить функцию с двухмерным массивом как параметра следующим образом:

void Anyn(int daa[ROWS][COL]);

Вы также можете задать только количество столбцов:

void Anyn(int daa[][COL]);

Иногда в функцию бывает удобно передать отдельным параметром число строк:

void Anyn(int daa[][COL], int nuRows);

Параметр nuRows сообщает функции, сколько строк в массиве daa, реализуя тем самым способ, позволяющий передавать в одну и ту же функцию массивы с разным количеством строк. Конечно, было бы идеально передать параметрам функции Anyn() обе размерности массива:

void Anyn(int daa[][], int nuRows, int numCols); /* ??? */

но, к сожалению, язык С не обладает такой возможностью. При передаче функциям двухмерных массивов вы должны задать, по крайней мере, количество столбцов, иначе компилятор не сможет правильно вычислить адреса элементов массива. Приведенное объявление функции не будет скомпилировано.

Данный код демонстрирует использование многомерных массивов как параметров функции. После запуска программы вы увидите две

таблицы с различным количеством строк, что подтверждает способность программных функций обрабатывать массивы разной длины.

#include
#include
#include

#define COL 8

void Fillrray(int daa[][COL], int numows);
void Displayable(int daa[][COLS, int numows);

int daal[7][COL];
int daa2[4][COL];

main()
{
randomize ();
FillArray(daa1, 7);
DisplayTable(daa1, 7);
Fillrray(data2, 4);
Displayable(daa2, 4);
return 0;
}

void Fillrray(int daa[][COL], int numows)

{

int r, c;
for (r = 0; r < numows; r++)
for (с = 0; с < COL; C++)
daa[r][c] = rand();
}

void Displayable(int daa[][COL], int numows)

{

int r, c;
for(r=0;r< numows; r++) {
printf("\n");
for (c =0; с < COL; C++)
printf(" %8d ”, daa[r][c]);
}

printf("\n");
}

Функции Fillrray() и Displayable() задают только число столбцов в параметре daa. Реальное число строк передается отдельным параметром numows типа int. Этот способ позволяет обеим функциям принимать массивы переменной длины при условии, что число столбцов остается фиксированным.

Источник

Все новости>>

Новости

Все новости...

Полезные материалы

© 2012 VediTa Генеральный партнер компания "НТО ИНТ"

телефон +7 (4752) 48-54-15

создание сайтов в Тамбове

Данный сайт носит информационный характер и ни при каких условиях не является публичной офертой, определяемой положениями Статьи 437 ГК РФ.