具有不同 Return 类型的函数指针 C
Function Pointers with Different Return Types C
我了解 C 中的函数指针以及如何使用它们。但是,我不知道如何拥有一个可以指向具有不同 return 类型的函数的函数指针。这可能吗?我知道如何使用函数指针数组,但我只找到了不同参数的示例,而不是 return 类型。 (C: How can I use a single function pointer array for functions with variable parameter counts?)如果数组更有意义,您能否举例说明如何做到这一点?
我有一个 switch/case 语句 select 将指向的函数。然后将其作为参数传递给另一个函数。例如,我在下面列出了一些我需要实现的功能:
float* doFloatOps();
void goToSleep();
int* multiplication();
我需要一个可以设置为指向其中任何一个的函数指针。我认为由于代码的设置,我只能有一个指针。如果您看到一种重组它以使函数指向更容易的方法,我将不胜感激。我的代码的当前结构是这样的:
switch(letter)
{
case 'a':
{
functionPointer = &doFloatOps;
}
case 'b':
{
functionPointer = &goToSleep;
}
.......
}
void carryOutFunctions(functionPointer)
{
while(....)
{
functionPointer;
}
}
请原谅上述与函数指针问题无关的任何语法错误。
所以我的主要问题是:我怎样才能拥有一组具有不同 return 类型的函数指针,或者使一个函数指针指向具有不同 return 类型的函数?
这是不可能的,您不能拥有指向具有不同 return 类型的函数的函数指针,因为它们是不兼容的类型。在这种情况下,您可以尝试 returning void *
,然后根据您的需要处理 return 值。
当然,这需要您在处理 returned 数据时非常小心。此技术的一个示例是在 pthread
中,您将函数指针传递给 pthread_create()
,类型如下 void (*)(void *)
.
在您的情况下,如果函数 return void *
应该可以工作,请记住 void *
无需转换即可转换为任何指针类型。
您也可以使用 union
作为 return 类型的课程。
我了解 C 中的函数指针以及如何使用它们。但是,我不知道如何拥有一个可以指向具有不同 return 类型的函数的函数指针。这可能吗?我知道如何使用函数指针数组,但我只找到了不同参数的示例,而不是 return 类型。 (C: How can I use a single function pointer array for functions with variable parameter counts?)如果数组更有意义,您能否举例说明如何做到这一点?
我有一个 switch/case 语句 select 将指向的函数。然后将其作为参数传递给另一个函数。例如,我在下面列出了一些我需要实现的功能:
float* doFloatOps();
void goToSleep();
int* multiplication();
我需要一个可以设置为指向其中任何一个的函数指针。我认为由于代码的设置,我只能有一个指针。如果您看到一种重组它以使函数指向更容易的方法,我将不胜感激。我的代码的当前结构是这样的:
switch(letter)
{
case 'a':
{
functionPointer = &doFloatOps;
}
case 'b':
{
functionPointer = &goToSleep;
}
.......
}
void carryOutFunctions(functionPointer)
{
while(....)
{
functionPointer;
}
}
请原谅上述与函数指针问题无关的任何语法错误。
所以我的主要问题是:我怎样才能拥有一组具有不同 return 类型的函数指针,或者使一个函数指针指向具有不同 return 类型的函数?
这是不可能的,您不能拥有指向具有不同 return 类型的函数的函数指针,因为它们是不兼容的类型。在这种情况下,您可以尝试 returning void *
,然后根据您的需要处理 return 值。
当然,这需要您在处理 returned 数据时非常小心。此技术的一个示例是在 pthread
中,您将函数指针传递给 pthread_create()
,类型如下 void (*)(void *)
.
在您的情况下,如果函数 return void *
应该可以工作,请记住 void *
无需转换即可转换为任何指针类型。
您也可以使用 union
作为 return 类型的课程。