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

时间:2012-02-26 16:51:19

标签: c++ pointers dynamic multidimensional-array

我的问题如下:我正在指向堆上的动态二维数组。这是在子函数“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参数应该是什么?

2 个答案:

答案 0 :(得分:1)

这是你的问题:

int** productionTable=new int*[num1];
...
return* productionTable;

基本上,通过返回,您只返回第一行(或指向它的指针),丢弃表的其余部分。要使其有效,您可以在Production中将productionTableint**(在所有地方)声明为return productionTableProduction并使用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;
}