Багатовимірні масиви
Особливістю мови С++ є несамовизначеність масивів, тому за іменем масиву неможливо довідатися його розмірність і розміри за кожним виміром. Крім того, у С++ багатовимірні масиви не визначені. Наприклад, якщо оголошений масив float d[3][4][5], те це не тривимірний, а одномірний масив d, що включає три елементи, кожний з який має тип float [4][5]. У свою чергу, кожний з чотирьох елементів типу float [5]. І, відповідно, кожний з цих елементів є масивом з п'яти елементів типу float. Ці особливості ускладнюють використання масивів як параметрів функцій.
При передачі масивів як параметрів через заголовок функції варто враховувати, що передавати масиви можна тільки з однією невизначеною границею мірності (ця мірність повинна бути самою лівою).
Приклади Приклад 1
Двовимірний масив як параметр функції.
Нехай потрібно скласти програму з функцією, що підраховує суму елементів матриці.
#include <iostream.h>
float summa(int n,float a[][3])
{
float s=0;
for(int i=0;i<n;i++)
for(int j=0;j<3;j++)
s=s+a[i][j];
return s;
}
void main()
{
float z[4][3]={0,1,2,3,4,5,6,7,7,6,5,4 };
cout<< "\n Сума елементів матриці дорівнює" << summa(4,z);
}
У результаті виконання програми на екран буде виведене повідомлення: “Сума елементів матриці дорівнює 50”.
Приклад 2
Допоміжний масив вказівників на масив як параметр функції.
Потрібно скласти програму з функцією, що повертає як результат мінімальний елемент матриці d розміром mxn.
#include <iostream.h>
float min(int m,int n,float *p[]);
void main()
{
float d[3][4]={1,2,-2,4,
5,0,-3,18,
-9,6,7,9};
float *r[]=
{
(float *) &d[0], (float *) &d[1],(float *) &d[2]
};
int m=3;
int n=4;
cout <<"\n Мінімальний елемент матриці дорівнює "<< min(m,n,r);
}
float min(int m,int n,float *p[])
{
float x=p[0][0];
for (int i=0;i<m;i++)
for (int j=0;j<n;j++)
if (x>p[i][j]) x=p[i][j];
return x;
}
У результаті виконання програми на екран буде виведене повідомлення: “Мінімальний елемент матриці дорівнює –9”.