Как передать значения и размерность двумерного массива из одной функции в другую? (C++)
Нужно, чтобы функция передавала значения переменных размерности двумерного массива и его значения , чтобы эти значения могли бы использоваться в других функциях (простите за тавтологию). Я привёл фрагмент программы, где пользователю предлагается ввести размерность, а далее значения двумерного массива:
void arrayInput()
{
int i, j, n, r;
cout << "Set height and width of your array: ";
cin >> n >> r;
int ** m = new int *[n];
for (i = 0; i < n; i++)
{
m[i] = new int[n];
}
for (i = 0; i < n; i++)
for (j = 0; j < r; j++)
{
cout << "m[" << i + 1 << "][" << j + 1 << "]= ";
cin >> m[i][j];
}
}
А эта функция нужна, чтобы вывести значения двумерного массива в виде таблицы:
void arrayOutputUnsort()
{
arrayInput();
cout << "Your array:" << endl;
for (&i = 0; &i < &n; &i++)
{
for (&j = 0; &j < &r; &j++)
{
cout << &m[&i][&j] << "\t";
}
cout << "\n";
}
}
Как правильно расставить в этой программе указатели?
Ответы (1 шт):
Начнем с того, что у вас размеры-то разные... Так что в первой функции надо заменить
m[i] = new int[n];
на
m[i] = new int[r];
Далее, в вашем случае надо вернуть и массив, и размеры. Так что, наверное, имеет смысл такой код:
void arrayInput(int**&m, int&n, int&r)
{
int i, j;
cout << "Set height and width of your array: ";
cin >> n >> r;
m = new int *[n];
.....
// Дальше все как и раньше, у учетом замечания выше
И тогда
void arrayOutputUnsort()
{
int ** m;
int n,r;
arrayInput(m,n,r);
cout << "Your array:" << endl;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < r; j++)
{
cout << m[i][j] << "\t";
}
cout << "\n";
}
}
P.S. Не понимаю, что вы хотели показать всеми этими &...
P.P.S. Но вообще-то вряд ли вы ограничитесь только выводом массива. В таком случае его надо создавать отдельно, и передавать в arrayOutputUnsort(), а не создавать его в этой функции.
P.P.P.S. Но лучше использовать, скажем, vector<vector<int>>, а то можете запутаться в указателях, рядом с которыми нужно еще и размеры передавать. Конечно, есть и другие варианты (например, почти Кама Сутра :) в этом ответе), но раз у вас С++ — грех не воспользоваться его возможностями.