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 );
}
答案 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;
}