c语言 - 此错误是什么意思?类型 "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);
}

相关内容

最新更新