我试图使用函数指针来调用另一个函数,但它给了我一个错误:
“void”类型的参数与“void”类型的参数不兼容 (*)(整数a)
这是我的代码:
#include<stdio.h>
#include<stdlib.h>
void print(void (*ptr)(int));
void printint(int);
int main()
{
char a;
int b;
scanf("%c %d",&a,&b);
print(printint(b));
return 0;
}
void print(void (*ptr)(int a))
{
ptr(a);
}
void printint(int a)
{
// printf("executed");
printf("%d",a);
}
我想我错误地使用了函数指针。
有人可以解释如何以正确的方式实现这个程序吗?
问题是
print(printint(b));
首先调用printint(b)
,然后将其返回值(即void
)传递给print()
。 因此出现错误。
您需要在单独的参数中将
b
值传递给 print()
,然后它可以将该值传递给 printint()
,例如:
#include <stdio.h>
#include <stdlib.h>
typedef void (*funcptr)(int);
void print(funcptr, int);
void printint(int);
int main()
{
char a;
int b;
scanf("%c %d", &a, &b);
print(printint, b);
return 0;
}
void print(funcptr ptr, int a)
{
ptr(a);
}
void printint(int a)
{
// printf("executed");
printf("%d", a);
}
表达式
printint(b)
的类型是void
,根据函数printint
声明:
void printint(int);
因此,您不是传递函数指针,而是在此调用中传递
void
:
print(printint(b));
函数
print
应该这样声明:
void print( void (*ptr)(int), int );
并这样称呼:
print( printint, b );
相应地,函数应该这样定义:
void print( void (*ptr)(int ), int a )
{
ptr(a);
}