gpt4 book ai didi

java - 将 C 代码转换为 Java

转载 作者:行者123 更新时间:2023-11-30 21:43:42 25 4
gpt4 key购买 nike

有人可以向我解释一下下面的两段代码的作用吗?在 Java 中等效的代码是什么样的?

double* ptr;
ptr = (double*)malloc(10*_R_CONST*sizeof(double)+2048);

根据我对 C 的有限了解,我推测它声明了一个指针 ptr,设置了指针的大小?

这是稍后在同一文件中进行的调用的样子

ptr[10*n+2]=-RadtoMOA(atan(y/x));
ptr[10*n+0]=x/3;
ptr[10*n+1]=y*12;
ptr[10*n+2]=-RadtoMOA(atan(y/x));
ptr[10*n+3]=t+dt;
<小时/>

还有另一个类似的函数,我对C也不熟悉。带星号的两行是我特别想知道的行。

double GetRange(double* sln, int yardage){
**double size=sln[_R_CONST*10+1];**
if (yardage<size){
**return sln[10*yardage];**
}
else return 0;
}
<小时/>

对于这个问题的第一部分,这里是完整的代码,包括。以上摘录。

double* ptr;
ptr = (double*)malloc(10*_R_CONST*sizeof(double)+2048);

double t=0;
double dt=0.5/Vi;
double v=0;
double vx=0, vx1=0, vy=0, vy1=0;
double dv=0, dvx=0, dvy=0;
double x=0, y=0;

double headwind=HeadWind(WindSpeed, WindAngle);
double crosswind=CrossWind(WindSpeed, WindAngle);

double Gy=GRAVITY*cos(DegtoRad((Angle + ZAngle)));
double Gx=GRAVITY*sin(DegtoRad((Angle + ZAngle)));

vx=Vi*cos(DegtoRad(ZAngle));
vy=Vi*sin(DegtoRad(ZAngle));

y=-SightHeight/12;

int n=0;
for (t=0;;t=t+dt){

vx1=vx, vy1=vy;
v=pow(pow(vx,2)+pow(vy,2),0.5);
dt=0.5/v;

// Compute acceleration using the drag function retardation
dv = retard(DragFunction,DragCoefficient,v+headwind);
dvx = -(vx/v)*dv;
dvy = -(vy/v)*dv;

// Compute velocity, including the resolved gravity vectors.
vx=vx + dt*dvx + dt*Gx;
vy=vy + dt*dvy + dt*Gy;



if (x/3>=n){
ptr[10*n+0]=x/3; // Range in yds
ptr[10*n+1]=y*12; // Path in inches
ptr[10*n+2]=-RadtoMOA(atan(y/x)); // Correction in MOA
ptr[10*n+3]=t+dt; // Time in s
ptr[10*n+4]=Windage(crosswind,Vi,x,t+dt); // Windage in inches
ptr[10*n+5]=RadtoMOA(atan(ptr[10*n+4])); // Windage in MOA
ptr[10*n+6]=v; // Velocity (combined)
ptr[10*n+7]=vx; // Velocity (x)
ptr[10*n+8]=vy; // Velocity (y)
ptr[10*n+9]=0; // Reserved
n++;
}

// Compute position based on average velocity.
x=x+dt*(vx+vx1)/2;
y=y+dt*(vy+vy1)/2;

if (fabs(vy)>fabs(3*vx)) break;
if (n>=R_CONST+1) break;
}

ptr[10*_R_CONST+1]=(double)n;

*Solution = ptr;

return n;

}

最佳答案

double* ptr;
ptr = (double*)malloc(10*_R_CONST*sizeof(double)+2048);

这是在运行时动态分配数组的 C 方式,Java 的等效方式是

double[] ptr = new double[10*_R_CONST+256];

(请注意,Java 不需要 sizeof(double) 因子,因为它分配的是对象,而不是字节。出于同样的原因,2048 字节缓冲区缩小到 256 个 double 。)

类似,方法声明

double GetRange(double* sln, int yardage)

将翻译为

double GetRange(double[] sln, int yardage)

您指出的其他行只是访问此 double 组的元素。

*Solution = ptr;

您没有显示 Solution 的声明,也没有询问它,但我的猜测是 Solution 是一个 double ** 并且作为参数传递。 Java 中没有直接的等效项(尽管可以模拟);它的作用是将分配的数组的地址存储到方法调用者提供的变量中。

关于java - 将 C 代码转换为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35664134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com