了解Java转换的C代码部分
我想将一些用C编写的代码转换成Java,但是我很难理解这段代码:了解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];
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指针。它也从不指向“内存的一个区域——怎么可能呢,它只能保存一个地址,而指针只能保存一个地址?”