0

int* m = 新的 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,它存储在最大的元素中。

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

整数 * ptr2

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

*最大 + *ptr2

并递归执行 6 和 5(而 *largest 保留 6 并且 *ptr2 保留 5)

*最大 + *ptr2

我尝试通过使用将 ptr2 上的初始位置设置为低于最大的一个元素

ptr2 = 最大 + d2

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

4

1 回答 1

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];
    }
  } 
}
于 2013-05-09T00:35:23.183 回答