Моя проблема в следующем: я делаю указатель на динамический двухмерный массив в куче. Это делается в подфункции «Производство», которая заполняет элементы таблицы (массива) и возвращает указатель массива на main(). Там я хочу указать указатель как параметр для другой функции «PrintTable»; который cout's стол. Моя проблема в том, что возвращаемый указатель на самом деле является одномерным массивом (C++), и я не знаю, как его адресовать, чтобы получить вторую строку массива. Позвольте мне объяснить это вам:Передача возвращаемого указателя динамического двумерного массива в подфункцию и обращение к массиву
Поэтому сначала у меня есть функция, которая возвращает указатель на двумерный массив.
int* Production(int num1, string name1[], int num2, string name2[])
{
int** productionTable=new int*[num1];
for (int i = 0; i < num1; i++)
{
productionTable[i] = new int[num2];
}
for (int i=0;i<num1;i++)
{
cout << "\nGive production " << name1[i]<<endl;
for (int j=0;j<num2;j++)
{
cout << "On " << name2[j] << " : ";
cin >> productionTable[i][j];
}
}
return* productionTable;
}
в основном() я позволяю возвращаемую точку указателя на указатель productiontable так оно существует в основном.
int* productionTable=Production(num1, name1[], num2, name2[])
Затем я вызываю функцию printTable(), которая должна выводить 2-мерный массив в виде таблицы. поэтому я хочу использовать этот указатель в качестве аргумента для другой функции; для извлечения элементов из этого массива.
PrintTable(num1, name1[], num2, name2[], productionTable);
Эта функция выглядит следующим образом:
void printTable(int num1, string name1[], int num2, string name2[],int* productionTable)
{
cout << left <<setw(10)<< "";
for (int i=0;i<num2;i++)
{
cout << left <<setw(10)<< name2[i];
}
cout<<endl;
for (int i=0;i<num1;i++)
{
cout << setw(10)<<name1[i]<<"";
for (int j=0;j<num2;j++)
{
cout << left <<setw(10)<< productionTable[i+j];
}cout<<endl;
}
}
Моя проблема заключается в том, что я не могу получить функцию для вывода второй строки вправо. Как мне обратиться ко второму параметру массива. Пока я прочитал, я должен сделать таблицу точкой [COLindex * COL_size + ROWindex]. Я пробовал, но я не дам ему напечатать второй ряд. Каким должен быть параметр COL_size?
Если вы используете '**' в C++, есть хороший шанс, что вы делаете что-то неправильно. Вы должны решительно рассмотреть использование контейнеров. –
, тогда скажите мне, как я должен сделать указатель на динамический 2-мерный массив. Существует не так много альтернатив. – Rps
'std :: vector>' есть одна возможность. 'boost :: multi_array ' другой. –