这个错误是什么意思? "void" 类型的参数与 "void (*)(int a)" 类型的参数不兼容
What is meant by this error? Argument of type "void" is incompatible with parameter of type "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)
,然后传递它的return值(即 void
)到 print()
。因此错误。
需要在单独的参数中将b
的值传给print()
,然后才可以把值传给printint()
,eg:
#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);
}
我正在尝试使用一个函数指针来调用另一个函数,但它给了我一个错误。我不明白错误。
这是我的代码:
#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)
,然后传递它的return值(即 void
)到 print()
。因此错误。
需要在单独的参数中将b
的值传给print()
,然后才可以把值传给printint()
,eg:
#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);
}