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


  • [警告] 从不兼容的指针类型传递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 = %fn", volume( wa, wb, wh, square ));
    printf("Volume without typedef = %fn", 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 );
}

您的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 = %fn", volume( wa, wb, wh, square ));
        printf("Volume without typedef = %fn", volume_without_typedef( wa, wb, wh, square ));
        return 0;
}

最新更新