Другие языки программирования и технологии

Двойной массив в функцию.

Привет народ.

1) Как правильно передать Двойной массив в Функцию с последующим использованием нужных элементов в нём.

2) Передать двойной как одинарный массив
К примеру

void function(Какие атрибуты?) ;

main(){
int height, width;
char arr[height][width]
}
Pavel Belosludtsev
Pavel Belosludtsev
435
#include <iostream>
#include <iomanip>
int max(int*, size_t);
void print(int*, size_t, size_t);
int main() {
const size_t r = 3, c = 4;
int mx[r][c] = { { 7, 13, 8, 21 }, { 14, 1, 11, 5 }, { 9, 12, 34, 2 } };
int* ptr = &mx[0][0];
size_t size = sizeof(mx) / sizeof(mx[0][0]);
print(ptr, r, c);
std::cout << " Max: " << max(ptr, size) << '\n';
std::cin.get();
}
int max(int* p, size_t s) {
int m = p[0];
for (size_t i = 1; i < s; ++i) if (m < p[i]) m = p[i];
return m;
}
void print(int* p, size_t r, size_t c) {
size_t size = r * c;
for (size_t i = 0; i < size; ++i) {
std::cout << std::setw(3) << p[i];
if ((i + 1) % c) continue;
std::cout << '\n';
}
std::cout << '\n';
}
Сергей Ларичев
Сергей Ларичев
63 035
Лучший ответ
Pavel Belosludtsev Спасибо
Виталий Белик Если использовать C++, то лучше подойдут for_each. В C++11 это вообще не проблема.
Как это - какие? Сам массив (адрес) и размерности по горизонтали и вертикали.
RE
Roma Elios
54 326
Чтобы не париться, можно передавать ссылки на std::vector<std::vector<тип> >.
А вообще, зависит от того, массив у вас всегда будет одного размера или размер может меняться.
Сравните:
1) (Размер фиксированный)
typedef int MyType[5][5];

MyType var;
func(var);

void func(MyType &v)
{
...
};

2.1) (Размер может меняться, но известен на этапе компиляции)
template <int size1, int size2> class MyType
{
int data[size1][size2];
};

template <int size1, int size2> void func (MyType<size1, size2> &var)
{
...
};

2.2) (Размер известен только на этапе исполнения)
Переписывать не буду, описали выше

У 2.1 могут быть вариации, например, проще его сделать членом класса:
template <int size1, int size2> class MyType
{
int data[size1][size2];
void func ();
};