如何处理因尝试使用函数指针调用另一个函数而导致的错误

问题描述 投票:0回答:2

我试图使用函数指针来调用另一个函数,但它给了我一个错误:

“void”类型的参数与“void”类型的参数不兼容 (*)(整数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);
}

我想我错误地使用了函数指针。

有人可以解释如何以正确的方式实现这个程序吗?

c function-pointers function-call function-parameter
2个回答
6
投票

问题是

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);
}

2
投票

表达式

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.