这个错误是什么意思?“void”类型的参数与“void(*)(inta)”类型的参数不兼容
我正在尝试使用函数指针来调用另一个函数,但它给了我一个错误。我不明白这个错误。
这是我的代码:
#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);
}
THE END
二维码