[英]Pass pointer to data as argument to function expecting two-dimensional array
[英]passing a returned pointer of a dynamical two-dimensional array to a sub-function and addressing the array
我的问题如下:我正在指向堆上的动态二维数组的指针。 这是在子函数“生产”中完成的,该子函数填充表(数组)的元素,并将数组的指针返回到main()。 在那里,我想将指针作为另一个函数“ PrintTable”的参数; 哪张桌子。 我的问题是返回的指针实际上是一个一维数组(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()中,我让返回的指针指向一个指针productiontable,以便它存在于main中。
int* productionTable=Production(num1, name1[], num2, name2[])
然后我调用函数printTable()来将二维数组输出为表格。 所以我想将此指针用作另一个函数的参数; 引用此数组中的元素。
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参数应该是什么?
这是你的问题:
int** productionTable=new int*[num1];
...
return* productionTable;
基本上,通过返回,您仅返回第一行(或指向它的指针),而丢弃表的其余部分。 为了使其工作,您可以将Production
和productionTable
(在所有位置)声明为int**
,在Production
return productionTable
,并使用productionTable[i][j]
进行元素检索。
我还不能完全了解您创建表的过程,因此那里很可能存在问题。 不过,仅查看末尾,似乎您正在尝试以二维方式打印一维数组,这很简单,只需跟踪每一行中数组的距离即可。
对于每一行,您需要将列索引偏移(列数*已打印的行数)。
看起来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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.