По указателю на указатель.. .
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
typedef unsigned int index_t;
int ** random(const size_t, const size_t);
void show(int **, const size_t, const size_t);
void destroy(int **, const size_t);
int main() {
cout << " Rows: "; size_t rows; cin >> rows;
cout << " Cols: "; size_t cols; cin >> cols;
int ** matrix = NULL;
if (matrix = random(rows, cols)) {
show(matrix, rows, cols);
destroy(matrix, rows);
matrix = NULL;
}
cin.get(); cin.get();
return 0;
}
int ** random(const size_t _rows, const size_t _cols) {
srand(unsigned(time(NULL)));
int ** matrix = NULL;
bool flag = false;
if (matrix = new (nothrow) int * [_rows])
for (index_t row = 0; row < _rows; row++) {
if (matrix[row] = new (nothrow) int [_cols])
for (index_t col = 0; col < _cols; col++)
matrix[row][col] = rand();
else {
destroy(matrix, _rows);
flag = true;
break;
}
if (flag) break;
}
return matrix;
}
void show(int ** _matrix, const size_t _rows, const size_t _cols) {
for (index_t row = 0; row < _rows; row++, cout << endl)
for (index_t col = 0; col < _cols; col++)
cout << setw(8) << _matrix[row][col];
}
void destroy(int ** _matrix, const size_t _rows) {
if (_matrix) {
for (index_t row = 0; row < _rows; row++)
if (_matrix[row])
delete[] _matrix[row];
delete[] _matrix;
}
}
Другие языки программирования и технологии
как вернуть двумерный динамический массив из функции С++
В C++ нет типа "динамический массив". И нет типа "двумерный массив". Если массивы в куче и есть массивы массивов.
А вообще - возвращай ссылку.
А вообще - возвращай ссылку.
вообще вопрос сложный
смотрите как используется:
int (*pArray)[4];
pArray = new int [12][4];
delete [] pArray;
говорят что массив pArray имеет тип int (*)[4]
но такой тип функцией возвратить нельзя, поэтому его приводят к типу (int**)
int ** function(){
int (*pArray)[4];
pArray = new int [12][4];
return (int**)pArray;
}
на практике рекомендую пользоваться одномерными массивами а индекс вычислять по ходу, например y*step+x
смотрите как используется:
int (*pArray)[4];
pArray = new int [12][4];
delete [] pArray;
говорят что массив pArray имеет тип int (*)[4]
но такой тип функцией возвратить нельзя, поэтому его приводят к типу (int**)
int ** function(){
int (*pArray)[4];
pArray = new int [12][4];
return (int**)pArray;
}
на практике рекомендую пользоваться одномерными массивами а индекс вычислять по ходу, например y*step+x
Как указатель на его нулевой элемент. По-другому никак.
Похожие вопросы
- Сортировка двумерного динамического массива
- двумерный динамический массив в паскале
- Дан двумерный динамический массив, надо составить программу, которая меняет местами две любые строки
- Как задать двумерный динамический массив в Паскале?
- ООП в c++. Совсем недавно познакомился с деструкторами класса и решил опробовать их на двумерном динамическом массиве.
- Как можно передать ДВУМЕРНЫЙ массив в функцию в С++, не создавая его, как глобальный. Пример ниже:
- вопрос о динамических массивах в fortran
- динамический массив в Visual C++
- Написать программу в VBA арифметической прогрессии в динамическом массиве.
- С++: Как изменять размеры многомерных динамических массивов по ходу выполнения программы?