我写了一个非常简单的代码来查找数组中的max。我无法弄清楚这里有什么问题...
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
答案 0 :(得分:8)
你设法超越自己。 maxValue
是函数的名称,maxvalue
是局部变量的名称。再次检查拼写。并在下次选择更好的名字。
答案 1 :(得分:2)
这是一个错字:使用
if((ArrayIn[i][j]>maxvalue)==1){
^
!!!
和
maxvalue = ArrayIn[i][j];
^
!!!
您已声明变量float maxvalue
(非大写'v')和函数maxValue(...)
(大写'v') - 因此编译器会尝试将该函数用作第二个操作数在那里使用maxValue
进行比较。
请注意,C具有重要意义 - 因此maxvalue
和maxValue
是不同的符号,但需要正确使用。
理想情况下,请尝试通过选择更好的名称来避免此类问题 - 例如,使用getMaxValue()
或calculateMaxValue()
作为函数名称。
除此之外,if((ArrayIn[i][j]>maxvalue)==1)
不必要地复杂 - 只需使用
if(ArrayIn[i][j] > maxvalue)