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