2016-04-24 177 views
-4

如何正确地将带指针参数的函数作为参数传递给另一个函数并返回值?使用带指针参数的函数作为另一个函数的参数

我有一个函数采用两个参数中的指针的形式2门阵列(POS1和POS2):

float distance(float *pos1, float *pos2){ 
    return sqrt(pow((pos1[0]-pos2[0]),2)+pow((pos1[1]-pos2[1]),2)); 
} 

我想通过这个函数作为参数传递给另一个功能:

float force(float mass1, float mass2, float(*distance)(float,float), float scaling, float *pos1, float *pos2){ 
    return distance(*pos1, *pos2); // how to correctly return the value? 
} 

这是返回值的正确方法吗?我是否还需要在“强制”功能中包含“距离”功能的参数?

谢谢!

+3

'return distance(mass1,mass2);' – user657267

+0

这里的事情是你传递的参数实际上是'float *'类型。这就是为什么我更喜欢在类型旁边写星号(而不是用逗号声明) – teivaz

+0

除了其他问题,'距离'似乎想要传递两个2元素数组。你没有两个数组来调用它。 (并且计算出任何两种质量的距离似乎都是不可信的。) –

回答

1

第一个距离必须是一个'函数指针',它将两个float *作为参数。因此,改变“强制”签名

float force(float m1, float m2, float (*distance)(float*, float*), float scaling) 

其次,在实际参数的力体通话距离,例如:

return distance(m1, m2); 

最后,呼吁力时简单地传递你的函数作为参数的名称:

x = force(y,z,&distance, scale); 

函数名称前面的&符号通常是可选的。

我希望有帮助。

-1

您不需要将某个功能“传递”给另一个功能,因为您可以在另一个中“调用”一个功能。我想你可以简单地有

float force(float mass1, float mass2, float scaling, float pos1, float pos2){ 
    float dis = distance(pos1, pos2); 
    ...... 
} 

C编程语言是图灵完备,即使没有函数指针,以及函数指针几乎很少在实践中使用。