Никак.
Для начала, в C++ нет стандартных двумерных массивов - есть массивы массивов, массивы указателей на массивы, массивы векторов, векторы векторов, векторы указателей... и это я еще до std::valarray не добрался.
Затем - при передаче и возврате из функции компилятору необходимо знать размер того, что передается. Ты ничего не написал про то, что размер фиксирован; но даже если так, значительно лучше передавать не сам массив, а указатель на него, и обычно именно так и происходит.
Другие языки программирования и технологии
C++ Как объявить и вывести из функции статический двумерный массив?
#include <iostream>
using namespace std;
template<typename T, const size_t rows, const size_t cols>
class Matrix {
public:
Matrix() {
for (size_t row = 0; row < rows; ++row) {
for (size_t col = 0; col < cols; ++col) {
matrix[row][col] = 0;
}
}
}
void ouput()const {
for (size_t row = 0; row < rows; ++row) {
for (size_t col = 0; col < cols; ++col) {
cout << ' ' << matrix[row][col];
}
cout << endl;
}
}
void fill() {
for (size_t row = 0; row < rows; ++row) {
for (size_t col = 0; col < cols; ++col) {
cout << "Element[" << row << "][" << col << "]: ";
cin >> matrix[row][col];
}
}
}
private:
T matrix[rows][cols];
};
int main() {
Matrix<int, 2, 3> matrix;
matrix.ouput();
cout << endl;
matrix.fill();
cout << endl;
matrix.ouput();
cin.ignore();
cin.get();
}
using namespace std;
template<typename T, const size_t rows, const size_t cols>
class Matrix {
public:
Matrix() {
for (size_t row = 0; row < rows; ++row) {
for (size_t col = 0; col < cols; ++col) {
matrix[row][col] = 0;
}
}
}
void ouput()const {
for (size_t row = 0; row < rows; ++row) {
for (size_t col = 0; col < cols; ++col) {
cout << ' ' << matrix[row][col];
}
cout << endl;
}
}
void fill() {
for (size_t row = 0; row < rows; ++row) {
for (size_t col = 0; col < cols; ++col) {
cout << "Element[" << row << "][" << col << "]: ";
cin >> matrix[row][col];
}
}
}
private:
T matrix[rows][cols];
};
int main() {
Matrix<int, 2, 3> matrix;
matrix.ouput();
cout << endl;
matrix.fill();
cout << endl;
matrix.ouput();
cin.ignore();
cin.get();
}
Сергей Статник
А без классов-то никак?
Спасибо, конечно, на заметку возьму.
Спасибо, конечно, на заметку возьму.
Незачем швыряться большими объемами данных в стэке, так как это слишком затратно.
return array_name;
Сергей Статник
А именно? Мне нужна функция и как ее вызвать. Я не понимаю, как использовать указатели.
как я уже однажды отвечал, лучше засунуть массивы в структуры или классы, и уже объекты возвращать передавать и т. д.
Сергей Статник
Я думаю, я бы знал, как выводить массивы из функции, если бы знал, что такое структуры и классы. Так что это мне не поможет.
const int**
Сергей Статник
Статический?
http://coliru.stacked-crooked.com/a/9cdd673267dff18f
template< typename T, size_t W, size_t H >
std::ostream & operator << (std::ostream & os, T(&array2d)[W][H])
{
for (auto && row : array2d)
{
for (auto && i : row)
os << i << " ";
os << "\n";
}
return os;
}
template< typename T, size_t W, size_t H >
uint8_t (&length(T(&array2d)[W][H]))[W*H];
int main()
{
constexpr size_t w = 9;
constexpr size_t h = 7;
int array2d[w][h]{};
// empty
std::cout << array2d << "\n";
// fill
std::generate_n((int*)array2d, sizeof length(array2d), std::bind(std::uniform_int_distribution<>{0, 9}, std::mt19937{ std::random_device{}() }));
// show
std::cout << array2d << "\n";
}
template< typename T, size_t W, size_t H >
std::ostream & operator << (std::ostream & os, T(&array2d)[W][H])
{
for (auto && row : array2d)
{
for (auto && i : row)
os << i << " ";
os << "\n";
}
return os;
}
template< typename T, size_t W, size_t H >
uint8_t (&length(T(&array2d)[W][H]))[W*H];
int main()
{
constexpr size_t w = 9;
constexpr size_t h = 7;
int array2d[w][h]{};
// empty
std::cout << array2d << "\n";
// fill
std::generate_n((int*)array2d, sizeof length(array2d), std::bind(std::uniform_int_distribution<>{0, 9}, std::mt19937{ std::random_device{}() }));
// show
std::cout << array2d << "\n";
}
Похожие вопросы
- c++ Borland. Найти количество не отрицательных нечетных элементов двумерного массива.
- Как можно передать ДВУМЕРНЫЙ массив в функцию в С++, не создавая его, как глобальный. Пример ниже:
- помогите срочно надо Квадратные массивы тема: Двумерные массивы на языке C++
- .помогите пожалуйста двумерный массив на языке c++
- Каким образом в c++ можно передать двумерный массив в фунцкию?
- C++: И снова передача двумерных массив в функцию.. . каким макаром это сделать?
- Сформировать двумерный массив C++
- дан двумерный массив С(3,4).Получите новый массив А путём увеличения всех элементов исходного массива на число С.
- Необходимо упорядочить строки двумерного массива, по возрастанию первого эл-та. СИ.
- Что такое Двумерный массив?
Вопрос: как сделать это со статическим и двумерным?
Дан массив a(n,m), n, m - какие-то числа.
Нужно написать функцию для ввода этого массива и отдельно функцию для вывода.
Я этого совершенно не понимаю. На лекции нам дали в примере одномерный массив, который просто передается тремя способами (указатель, адрес и константу) в функцию и там обрабатывается. Что вообще такое адреса и указатели и чем они вообще отличаются нам еще не объясняли. Делайте, как хотите.
http://eel.is/c++draft/dcl.array#:declarator,multidimensional_array