了解Java转换的C代码部分

了解Java转换的C代码部分,java,c,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];

我想将一些用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;
}
void iqfir(浮点*buff,常量浮点*In,浮点*Pt,常量int len)
{
int i;
浮点数I;
I=1.0;
对于(i=0;i

我很难理解这里指针和数组的用法。

函数将
buff
数组中的每个项与
数组中相同索引处的项相乘的结果求和

例如,如果buff为:

1.02 
2.22
在这方面:

3.43
6.55
len是2,答案是:

(1.02 * 3.43) + (2.22 * 6.55)
现在解释每个参数是什么。

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

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

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

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

    例如,如果buff为:

    1.02 
    2.22
    
    在这方面:

    3.43
    6.55
    
    len是2,答案是:

    (1.02 * 3.43) + (2.22 * 6.55)
    
    现在解释每个参数是什么。

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

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

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

    循环将迭代len次,在此期间,一个名为“v”的变量(类型为double)将被设置为等于i处的任何buff。然后,类型为float的变量“I”被设置为等于v+处于I时“In”的解引用值。最后,我们将Pt改为等于我们的浮点变量“I”,因为没有数组。@Olaf有一个指向数组的指针,所以它并不遥远。@4castle的可能重复:不,没有指向数组的指针
    float
    当然不是数组。循环将迭代len次,在此期间,一个名为“v”的双精度变量将被设置为等于i处的任何buff。然后,类型为float的变量“I”被设置为等于v+处于I时“In”的解引用值。最后,我们将Pt改为等于我们的浮点变量“I”,因为没有数组。@Olaf有一个指向数组的指针,所以它并不遥远。@4castle的可能重复:不,没有指向数组的指针
    float
    当然不是数组。C不支持方法。即使是iff,这也只是一个函数。指针不能是“null”,而是null指针。它也从不指向“内存的一个区域——怎么可能,它只能保存一个地址。而保存无效值的指针不会指向任何地方。@Olaf他们使用Java术语来描述C,因为OP显然更了解Java。明白吗“一段代码不需要编译器级别的大量解释。这些都是很好的类比。@4castle:方法和函数之间有很大的区别。如果OP或回答者不明白这一点,他无论如何都会迷失方向。使用不正确的术语毫无帮助。@Olaf我在使用Java之前是一名C程序员。我编辑了这篇文章,以澄清您提出的一些问题。希望这将有助于OP和未来的读者。C不支持方法。即使是iff,这也只是一个函数。指针不能是“null”,而是null指针。它也从不指向“内存的一个区域——怎么可能呢,它只能保存一个地址,而指针只能保存一个地址?”