- [警告] 从不兼容的指针类型传递
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;
}