C++ 如何使用函数参数中的int指针获取2d数组中最大值的索引并返回指针? double*matrix_max_1(double mat[][COL],int r,int*pi,int*pj){ double*ptrmat=0; 双最大值=0; 对于(pi=0;*pi

C++ 如何使用函数参数中的int指针获取2d数组中最大值的索引并返回指针? double*matrix_max_1(double mat[][COL],int r,int*pi,int*pj){ double*ptrmat=0; 双最大值=0; 对于(pi=0;*pi,c++,arrays,pointers,multidimensional-array,C++,Arrays,Pointers,Multidimensional Array,而言,您使用的指数完全是假的: double * matrix_max_1(double mat[][COL], int r, int* pi, int* pj) { double * ptrmat = 0; double max = 0; for (pi = 0; *pi <= ROW; pi++) for (pj = 0; *pj <= COL; pj++) { if (mat[*pi][*pj] > *

而言,您使用的指数完全是假的:

double * matrix_max_1(double mat[][COL], int r, int* pi, int* pj) {

    double * ptrmat = 0;

    double max = 0;


    for (pi = 0; *pi <= ROW; pi++)
        for (pj = 0; *pj <= COL; pj++) {
           if (mat[*pi][*pj] > *ptrmat) {

                ptrmat = &mat[*pi][*pj];




            }


        }

    return ptrmat;
}

for(pi=0;*pi这方面有很多问题

 double* currentMax = &mat[0][0];
 for (size_t i = 0; i < ROW; i++)
        for (size_t j = 0; j < COL; j++) {
            if (mat[i][j] > *currentMax) {...
不是一个很好的值;每次要取消引用它时,都需要将它与null指针进行比较

double * ptrmat = 0;
也不是一个很好的起始值-如果所有元素都是负数怎么办

double max = 0;
如果您修复了其他错误,这将失败,因为
ptrmat
是第一次迭代时的空指针

相反

  • 假设第一个矩阵元素是最大值
  • 使用局部变量循环,并且只有在知道答案时才将其值存储在“out”参数中
大概是这样的:

   for (pi = 0; *pi <= ROW; pi++)
if (mat[*pi][*pj] > *ptrmat)
double*matrix_max_1(double matrix[][COL],int行,int*行,int*列){
int max_row=0;
int max_列=0;
对于(int i=0;i矩阵[max_行][max_列]){
最大行=i;
最大列=j
}
}
}
如果(行!=nullptr){
*行=最大行;
}
如果(列!=nullptr){
*列=最大列
}
返回和矩阵[最大行][最大列];
}

想想你第一次与
*ptrmat
比较时
ptrmat
的值是多少。此外,一个包含
K
元素的数组从
0
K-1
为(pi=0;*pi
double*ptrmat=0;if(mat[*pi][*pj]>*ptrmat)建立索引
和取消引用空指针也不是一个好主意。还要注意的是
*pi
*pj
不会存储您认为它们将存储的内容。使用局部变量进行循环,除了存储答案外,不要触摸
*pi
*pj
。增加
pi
pj
没有意义(这么小的函数中有很多bug)非常感谢你的帮助回答。我以前不知道空指针,因为正如你所看到的,我还是一个初学者。
if (mat[*pi][*pj] > *ptrmat)
double* matrix_max_1(double matrix[][COL], int rows, int* row, int* column) {
    int max_row = 0;
    int max_column = 0;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < COL; j++) {
            if (matrix[i][j] > matrix[max_row][max_column]) {
                max_row = i;
                max_column = j
            }
        }
    }
    if (row != nullptr) {
        *row = max_row;
    }
    if (column != nullptr) {
        *column = max_column
    }

    return &matrix[max_row][max_column];
}