Привет народ.
1) Как правильно передать Двойной массив в Функцию с последующим использованием нужных элементов в нём.
2) Передать двойной как одинарный массив
К примеру
void function(Какие атрибуты?) ;
main(){
int height, width;
char arr[height][width]
}
Другие языки программирования и технологии
Двойной массив в функцию.
#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';
}
#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';
}
Pavel Belosludtsev
Спасибо
Виталий Белик
Если использовать C++, то лучше подойдут for_each. В C++11 это вообще не проблема.
Как это - какие? Сам массив (адрес) и размерности по горизонтали и вертикали.
Чтобы не париться, можно передавать ссылки на 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 ();
};
А вообще, зависит от того, массив у вас всегда будет одного размера или размер может меняться.
Сравните:
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 ();
};
Похожие вопросы
- С++.Дан одномерный числовой массив. Написать функции.
- Привет, помогите с программированием на СИ, передача массива в функцию..
- Как можно передать ДВУМЕРНЫЙ массив в функцию в С++, не создавая его, как глобальный. Пример ниже:
- Вопрос массивам и функциям по с++
- Как правильно присвоить строку двойному массиву СИ. Спасибо! Вопрос внутри
- Паскаль, домашка, одномерный массив и функции, ХЭЛП!
- Язык си, двухмерный массив и функция.
- нахождение наибольшего элемента массива через функцию
- C++: И снова передача двумерных массив в функцию.. . каким макаром это сделать?
- как вернуть двумерный динамический массив из функции С++