我不明白这些错误可以解释一下吗?
错误:一元''的无效类型参数(有'double') 错误:一元''的无效类型参数(有'double') 错误:一元'*'的无效类型参数(有'double')
double getMedian(double *array, int *hours){
if (*hours <= 0) return 0;
if (*hours % 2) return (float)*array[(*hours + 1) / 2];
else{int pos = *hours / 2;
return (float)(*array[pos] + *array[pos + 1]) / 2;}}
答案 0 :(得分:6)
您已经使用array
运算符取消引用[]
。你想要的是:
double getMedian(double *array, int *hours){
if (*hours <= 0) return 0;
if (*hours % 2) return (float)array[(*hours + 1) / 2];
else{int pos = *hours / 2;
return (float)(array[pos] + array[pos + 1]) / 2;}}
请注意,撰写x[y]
是*(x + (y))
的简写。在您的代码中,您基本上具有等效于**array
。
答案 1 :(得分:2)
在数组或指针上使用[]运算符时,不必再次取消引用它们以获取值。 你可以这么说,
if (*hours % 2) return (float)array[(*hours + 1) / 2];
和
return (float)(array[pos] + (array[pos + 1]) / 2);
答案 2 :(得分:1)
*array[(*hours + 1) / 2];
所以array
是一系列双打。您将其视为2D数组,因为您尝试通过*
和[]
取消引用一次。
另外,我会在所有这些内容中添加一些()
,以便在不记住操作顺序的情况下使其更清晰。