函数的参数作为C中的函数(返回值3221225477)

时间:2018-04-15 13:36:53

标签: c

  • [警告]从不兼容的指针类型
  • 传递volume的参数4
  • [注意]预期ActionT但参数类型为float (*)(float *, float *)
  • [警告]从不兼容的指针类型
  • 传递volume_without_typedef的参数4
  • [注意]预期float (*)(float, float)但参数类型为float (*)(float *, float *)

作为另一个函数的参数的函数效果不佳。
我做谷歌。我不知道如何处理。 代码如下。

#include <stdio.h>
float square(float *a, float *b);
typedef float( * ActionT )( float, float );
float volume( float *a, float *b, float *h, ActionT pAction );
float volume_without_typedef( float *a, float *b, float *h, float( * pAction )( float, float ) );
int main()
{
    float a,b,h;
    float *wa, *wb, *wh;
    printf("Give values: a, b, h(height):\n");
    scanf("%f %f %f", &a,&b,&h);
    wa=&a;
    wb=&b;
    wh=&h;
    printf("Volume = %f\n", volume( wa, wb, wh, square ));
    printf("Volume without typedef = %f\n", volume_without_typedef( wa, wb, wh, square ));
    return 0;
}

float square(float *a, float *b)
{
    return (*a * *b);
}
float volume( float *a, float *b, float *h, ActionT pAction )
{
    return (pAction( *a, *b ) * *h );
}
float volume_without_typedef( float *a, float *b, float *h, float( * pAction )( float, float ) )
{
    return ( pAction( *a, *b ) * *h );
}

1 个答案:

答案 0 :(得分:0)

您的function pointer声明

typedef float( * ActionT )( float, float );

ActionT是一个函数指针,可以指向任何函数,该函数应该将 2个浮点数作为输入和应该返回one float,现在你应该遵循这些。

接下来尝试将ActionT指向square()功能,但square()将参数设为2 float*而不是float。这就是编译器发出警告的原因。

因此,您应该更改square()功能,如下所示。你也在volume()函数中错误地调用了函数指针。

(pAction( *a, *b ) * *h ); ---> (*pAction) ( *a, *b ) * (*h);

完整代码

float square(float a, float b) {
        return ((a) * (b));
}
float volume( float *a, float *b, float *h, ActionT pAction)  {
        return  (*pAction) ( *a, *b ) * (*h);
}
float volume_without_typedef( float *a, float *b, float *h, float( * pAction )( float, float ) ) {
        return ( pAction( *a, *b ) * *h );
}

int main() {
        float a,b,h;
        float *wa, *wb, *wh;
        printf("Give values: a, b, h(height):\n");
        scanf("%f %f %f", &a,&b,&h);
        wa=&a;
        wb=&b;
        wh=&h;
        printf("Volume = %f\n", volume( wa, wb, wh, square ));
        printf("Volume without typedef = %f\n", volume_without_typedef( wa, wb, wh, square ));
        return 0;
}