русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Багатовимірні масиви як параметри функцій


Дата додавання: 2014-04-22; переглядів: 1535.


Мова С++ розглядає багатовимірні масиви як масиви, елементами яких є підмасиви меншої вимірності. Тому, якщо багатовимірний масив треба передавати в функцію для опрацювання, то відповідний формальний параметр функції має бути вказівником на перший підмасив цього багатовимірного масиву.

Як і у випадку одновимірних масивів, для оголошення формальних параметрів, що відповідають багатовимірним масивам, можна застосовувати дві форми:

 

тип_елементв ім’я_масиву [ ] [к-сть_елементів_1]…[к-сть_елементів_n]

тип_елементв ( * ім’я_масиву ) [к-сть_елементів_1]…[к-сть_елементів_n]

 

В обох формах оголошення треба обов’язково вказувати кількість елементів для кожного виміру масиву, крім першого. Багатовимірний масив зберігається в оперативній пам'яті як послідовність підмасивів. Тому для знаходження адреси певного елемента (чи порядкового номеру елемента в масиві) за значенням його індексів треба знати розмірність кожного виміру цього масиву.

Вказівникова форма оголошення параметра, що є багатовимірним масивом, вимагає використання круглих дужок, оскільки операція * має нижчий пріоритет, ніж операція [ ]. Без круглих дужок відповідний параметр буде масивом вказівників на тип_елементів, а не вказівником на підмасив заданого багатовимірного масиву.

Для прикладу використання різних форм звертання до багатовимірних масивів створимо декілька функцій, які будуть заповнювати двовимірний масив випадковими числами, виводити його на екран, та знаходити найбільший елемент цього масиву.

 

#ifndef ARRAY2D_H

#define ARRAY2D_H

#include <iostream>

using namespace std;

#define NCOLS 4

#define NROWS 3

void array2d_fill( int m[ ][ NCOLS ] ) {

for ( int i = 0; i < NROWS; i++ )

for ( int j = 0; j < NCOLS; j++ )

m[ i ][ j ] = rand( ) % 100;

}

void array2d_print( int ( * m )[ NCOLS ] ) {

int ( * prow )[ NCOLS ], * pelem;

for ( prow = m; prow - m < NROWS; prow++ ) {

for ( pelem = *prow; pelem - *prow < NCOLS; pelem++ )

cout << *pelem << "\t";

cout << endl;

}

}

int array2d_max( int * m ) {

int max = *m;

int num = NCOLS * NROWS;

for ( int i = 0; i < num; i++, m++ )

if ( max < *m )

max = *m;

return max;

}

#endif

#include "array2d.h"

#include <iostream>

using namespace std;

int main() {

int a[ NROWS ][ NCOLS ];

array2d_fill( a );

array2d_print( a );

cout << array2d_max( a[ 0 ] ) << endl;

}

 


<== попередня лекція | наступна лекція ==>
Використання кваліфікатора const в оголошеннях параметрів | Опрацювання структур у функціях


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн