具有不同返回类型的功能指针C.

时间:2015-02-17 13:52:27

标签: c pointers function-pointers

我理解C中的函数指针以及如何使用它们。但是,我不知道如何使用一个可以指向具有不同返回类型的函数的函数指针。这可能吗?我知道如何使用函数指针数组,但我只找到了不同参数的示例,而不是返回类型。 (C: How can I use a single function pointer array for functions with variable parameter counts?)如果一个数组更有意义,你能提供一个如何做到这一点的例子吗?

我有一个switch / case语句来选择将要指向的函数。然后将其作为参数传递给另一个函数。例如,我列出了下面需要实现的一些功能:

float* doFloatOps();
void goToSleep();
int* multiplication();

我需要一个可以设置为指向其中任何一个的函数指针。我认为由于代码的设置,我只能有一个指针。如果你看到一种重组方法,使函数指向更容易,我会很感激输入。我的代码的当前结构是这样的:

switch(letter)
{
    case 'a':
    {
        functionPointer = &doFloatOps;
    }
    case 'b':
    {
        functionPointer = &goToSleep;
    }
     .......
}

void carryOutFunctions(functionPointer)
{
    while(....)
    {
        functionPointer;
    }
}

请原谅上面与函数指针问题无关的任何语法错误。

所以我的主要问题是:我如何拥有一个具有不同返回类型的函数指针数组,或者使一个函数指针指向具有不同返回类型的函数?

1 个答案:

答案 0 :(得分:3)

这是不可能的,你不能有一个指向具有不同返回类型的函数的函数指针,因为它们是不兼容的类型。在这种情况下,您可以尝试返回void *,然后根据需要处理返回值。

当然,这要求您在处理返回的数据时要非常小心。此技术的一个示例是在pthread中,您将函数指针传递给pthread_create(),其类型为void (*)(void *)

在你的情况下,如果函数返回void *,它应该有效,并记住void *可以转换为任何指针类型而不进行强制转换。

您当然也可以使用union作为返回类型。