Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有不同返回类型的函数指针C_C_Pointers_Function Pointers - Fatal编程技术网

具有不同返回类型的函数指针C

具有不同返回类型的函数指针C,c,pointers,function-pointers,C,Pointers,Function Pointers,我了解C中的函数指针以及如何使用它们。但是,我不知道如何使用一个函数指针来指向具有不同返回类型的函数。这可能吗?我知道如何使用函数指针数组,但我只找到了不同参数的示例,没有找到返回类型。()如果一个数组更有意义,你能提供一个例子说明如何做到这一点吗 我有一个switch/case语句来选择要指向的函数。然后将其作为参数传递给另一个函数。例如,我在下面列出了需要实现的一些功能: float* doFloatOps(); void goToSleep(); int* multiplication()

我了解C中的函数指针以及如何使用它们。但是,我不知道如何使用一个函数指针来指向具有不同返回类型的函数。这可能吗?我知道如何使用函数指针数组,但我只找到了不同参数的示例,没有找到返回类型。()如果一个数组更有意义,你能提供一个例子说明如何做到这一点吗

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

float* doFloatOps();
void goToSleep();
int* multiplication();
我需要有一个函数指针,可以设置为指向其中任何一个。我认为由于代码的设置,我只能有一个指针。如果您能找到一种方法来重新构造它,使函数指向更容易,我将非常感谢您的输入。我的代码的当前结构如下所示:

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

void carryOutFunctions(functionPointer)
{
    while(....)
    {
        functionPointer;
    }
}
请原谅上述与函数指针问题无关的语法错误


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

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

当然,这需要您在处理返回的数据时非常小心。这种技术的一个例子是在
pthread
s中,您通过以下类型
void(*)(void*)
传递一个指向
pthread\u create()
的函数指针

在您的情况下,如果函数返回
void*
,它应该可以工作,并且记住
void*
可以转换为任何指针类型,而无需强制转换


您也可以使用<代码>联合/代码>作为返回类型的过程。

您可以考虑函数指针的合并,每个指针具有不同返回类型的成员,然后为每个情况设置/使用适当的联合成员。这不是你想要的,但这是我能想到的实现你想要的唯一方法。iharob和@epicbrew谢谢!联合返回类型可以正常工作。