繁体   English   中英

将动态二维数组的返回指针传递给子函数并寻址该数组

[英]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;

基本上,通过返回,您仅返回第一行(或指向它的指针),而丢弃表的其余部分。 为了使其工作,您可以将ProductionproductionTable (在所有位置)声明为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM