Добро пожаловать в блог официального сайта www.cplus-plus.ru

Все представленные материалы в этом блоге находятся по адрусу www.cplus-plus.ru 
Сайт разработан с целью удобного изучения объектно-ориентированного программирования языка C++. Сайт содержит: большое количество cред разработки, видеоуроков, исходников, учебников C++ как для начинающих, так и для продвинутых!

Поиск по этому блогу

Каталог статей

четверг, 28 октября 2010 г.

Двумерные массивы в C++ как параметры

Когда параметром является двумерный массив, его вторая размерность обязательно указывается в объявлении функции

float a[ ][4].

Объявление параметра как float a[ ][ ] недопустимо.
Нет ничего странного в том, что компилятору требуется вторая размерность, ведь именно она определяет размер тех одномерных массивов, которые составляют двумерный.

Пример. Определить функцию, которая распечатывает двумерный массив а[3][4] в виде матрицы.

void print (float a[] [4], int size1)
{
for (int i = 0; i < size1; i++)
{
for (int j = 0; j < 4; j++)
cout « a[i][j] « " ";
cout « endl;
}
}

Заголовок функции в предыдущем примере мог быть и таким:
void print (float (*a)[4], int size1)

Параметр a здесь является указателем на одномерный массив из четырех вещественных чисел.

Если вам не нравится передавать в функцию двумерные массивы, можно передать двумерный массив как одномерный, и в теле функции вычислять местоположение элемента.

void print1(float a[], int size1, int size2)
{
for (int i = 0; i < size1; i++)
{
for (int j = 0; j < size2; j++)
cout « a[i * size2 + j] « " ";
cout « endl ;
}
}

Чтобы правильно вызвать эту функцию, надо передать ей в первом параметре адрес не двумерного массива m, а одномерного *m, иными словами не float**, а просто float*.

float m[] [4] = {{11, 12, 13, 14},
{21, 22, 23, 24},
{31, 32, 33, 34}};
print1(*m, 3, 4);

Этого же можно добиться явным приведением типа.

print1((float*)m, 3, 4);

Источник: www.cplus-plus.ru


Комментариев нет:

Отправить комментарий

Объектно-ориентированное программирование на языке C++