我的问题如下:我正在指向堆上的动态二维数组。这是在子函数“Production”中完成的,它填充表(数组)的元素并将数组的指针返回给main()。在那里我想把指针作为另一个函数“PrintTable”的参数;哪个cout是桌子。我的问题是返回的指针实际上是一维数组(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;
}
在main()中的我让返回的指针指向一个可生成的指针,因此它存在于main中。
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参数应该是什么?
答案 0 :(得分:1)
这是你的问题:
int** productionTable=new int*[num1];
...
return* productionTable;
基本上,通过返回,您只返回第一行(或指向它的指针),丢弃表的其余部分。要使其有效,您可以在Production
中将productionTable
和int**
(在所有地方)声明为return productionTable
,Production
并使用productionTable[i][j]
元素检索。
答案 1 :(得分:0)
我无法完全掌握你的桌子,所以那里可能存在问题。只是看一下结束位,看起来你正试图在二维中打印一维数组,这很简单,你只需要跟踪每行中你的数组有多远。
对于每一行,您需要将列索引偏移(列数*已打印的行数)。
看起来num1
是总行数,num2
是总列数。 i
是已完成的行数。所以i*num2
是读取您要打印的行所需的偏移量。
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*num2+j];
}
cout<<endl;
}