0

我编写了一个非常简单的代码来查找数组中的最大值。我无法弄清楚这里出了什么问题......

float maxValue(float **ArrayIn, long length, long width, short* result_coor){
    int i,j;
    float maxvalue = ArrayIn[0][0];
    for(i=0;i<length;i++){
        for(j=0;j<width;j++){
            if((ArrayIn[i][j]>maxValue)==1){
                maxValue = ArrayIn[i][j];
                result_coor[0] = i;
                result_coor[1] = j;
            }
        }
    }
    return maxvalue;
}

我收到此错误:

array_processing.c: In function ‘maxValue’:
array_processing.c:9:20: error: invalid operands to binary > (have ‘float’ and ‘float
(*)(float **, long int,  long int,  short int *)’)
array_processing.c:10:13: error: lvalue required as left operand of assignment
make: *** [array_processing.o] Error 1
4

2 回答 2

8

你设法超越了自己。maxValue是函数maxvalue的名称,也是局部变量的名称。再次检查您的拼写。并且下次选择更好的名字。

于 2013-07-03T19:08:05.753 回答
2

这是一个错字:使用

if((ArrayIn[i][j]>maxvalue)==1){
                     ^
                    !!!

    maxvalue = ArrayIn[i][j];
       ^
      !!!

您已经声明了一个变量float maxvalue(非大写“v”)和一个函数maxValue(...)(大写“v”) - 因此当您在那里使用时,编译器会尝试将该函数用作比较的第二个操作数maxValue

请记住,C 是区分大小写的——因此maxvaluemaxValue是不同的符号,但它们需要正确使用。

理想情况下,尝试通过选择更好的名称来避免此类问题 - 例如,使用getMaxValue()calculateMaxValue()作为函数名称。

除此之外,这if((ArrayIn[i][j]>maxvalue)==1)是不必要的复杂 - 只需使用

if(ArrayIn[i][j] > maxvalue)
于 2013-07-03T19:07:32.443 回答