以2个指针递归遍历列

时间:2013-05-09 00:06:08

标签: c++ arrays pointers recursion

  

int * m = new int [d1 * d2]; (行*列)

for ( j = 0; j < d2; j++ ){
        largest = new int(0);
        for ( i = j; i < d1*d2; i +=d2){
            if ( *(m+i) > *largest){largest = (m+i);} 

此代码在列中找到最大的元素。我想要做的是通过使用指针以递归方式在列中查找最大元素。

让我们说我有这样一个专栏:

  

7

     

6

     

5

我找到了最大的元素,在这种情况下是7,它存储在最大的元素中。

现在我想要第二个指针,让我们说

  

int * ptr2

并使用它来存储我的列中的第二大元素,在这种情况下为6并计算

  

*最大+ * ptr2

以6和5递增递增(而*最大值保持6且* ptr2保持5)

  

*最大+ * ptr2

我尝试使用

将ptr2上的初始位置设置为最大值以下的元素
  

ptr2 =最大+ d2

没有正常工作。当最大元素位于列的底部时,也可能会出现问题,那么这条线会将ptr2设置为我猜的数组之外的某个位置。

1 个答案:

答案 0 :(得分:0)

我没有尝试编译/运行它,但作为建议:

int *largest, *runnerup;
for ( j = 0; j < d2; j++ ){
  int l = 0;
  find_max(m, j, &l, &largest, d2);
  find_max(m, j, largest, &runnerup, d2);
  // do stuff
  largest = runnerup;
}

void find_max(int *mx, int col, int *le, int **max, int d2) {
  max[0] = le;
  for ( i = col; i < d1; i++){
    if (max[0] <= m[i * d2] && max[0] != &m[i * d2]) {
      max[0] = &m[i * d2];
    }
  } 
}