如何解决这个错误是什么意思? “void”类型的参数与“void (*)(int 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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。