问题描述
我正在尝试使用函数指针来调用另一个函数,但它给了我一个错误。我不明白错误。
这是我的代码:
#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);
}