理解用于Java转换的C代码部分

时间:2016-08-11 02:42:48

标签: java c

我想将一些用C编写的代码转换为Java,但是我很难理解这段代码:

void iqfir(float *buff, const float *In, float *Pt, const int len)
    {
        int i;
        float I;

        I = 1.0;

       for (i = 0; i < len; i++) {
           double v;
           v = buff[i];
           I += v * In[i];
      } *Pt = I;
}

我在这里无法理解指针和数组的使用。

1 个答案:

答案 0 :(得分:2)

该函数将buff数组中每个项目与同一索引处In数组中的项相乘的结果相加。

例如,如果buff是:

1.02 
2.22

和In是:

3.43
6.55

和len是2,答案是:

(1.02 * 3.43) + (2.22 * 6.55)

现在解释每个参数是什么。

  • float *buff将包含一个内存区域开头的地址。该内存可以被视为包含零个或多个float值。
  • const float *In将包含一个内存区域开头的地址。该内存也可以被视为包含零个或多个float值。
  • float *Pt将包含一个内存区域开头的地址。在这种情况下,预计这将指向该方法应该保存答案的一个float值。

通常,指针可以:

  • 为null - 也称为“空指针”(因此不指向任何内存)
  • 是指向存储一个项目的单个内存位置的值
  • 是一个指向区域或内存开头的值,用于存储多个项目
  • 是指向无效内存位置且不应使用的值

在这种情况下,buffIn都指向包含多个float值的内存区域的开头(希望至少与len一样多指定)。 Pt指向已分配的内存区域的开头,以便该函数可以向调用者提供计算结果。