【问题标题】:error: invalid type argument of unary '*'错误:一元“*”的类型参数无效
【发布时间】:2014-05-19 03:20:31
【问题描述】:

我不明白这些错误,谁能解释一下?

错误:一元“”的类型参数无效(有“双”) 错误:一元“”的类型参数无效(有“双”) 错误:一元“*”的类型参数无效(有“双”)

    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;}}

【问题讨论】:

    标签: c++ arrays pointers


    【解决方案1】:

    您已经使用 [] 运算符取消引用 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 的等价物。

    【讨论】:

      【解决方案2】:

      当您在数组或指针上使用 [] 运算符时,您不必再次取消引用它们以获取值。 你可以说,

      if (*hours % 2) return (float)array[(*hours + 1) / 2];
      

      return (float)(array[pos] + (array[pos + 1]) / 2);
      

      【讨论】:

        【解决方案3】:

        *array[(*hours + 1) / 2]; 所以array 是一个双精度数组。您将其视为二维数组,因为您尝试通过* 取消引用一次,并通过[] 取消引用一次。

        另外,我会在所有这些中添加一些 () 以使其更清晰,而无需记住操作顺序。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-20
          • 1970-01-01
          • 1970-01-01
          • 2021-04-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多