我见过许多具有void
返回类型的指针函数的程序。这背后的原因是什么? void
指针函数的实际需求是什么?
void *print_message_function( void *ptr ){
int *message,i,j;
message = (int *) ptr;
if(*message == 1){
for(i=0;i<5;i++){ res1 += array[i];
}
}
else if(*message == 2){
for(i=5;i<10;i++){
res2 += array[i];
}
}
}
如果可能,请举例说明何时使用void
指针功能。
答案 0 :(得分:3)
您的“指针功能”术语令人困惑。在我看来,你的问题是
在所有返回指向某种类型的指针的函数中,看起来如此 其中很多是返回指向void的指针的函数。 有什么理由吗?
如果这确实是你的问题,那么 - 是的,在C中,void *
可以转换为AnyOtherType *
而无需演员。结果,诸如 qsort 之类的函数(其指向函数的指针(“回调”作为另一张海报提到))可以用作“通用”函数。在对特定类型的值进行排序时,您将传递自己的比较器函数,该函数在内部知道它实际上不是void *
,而是YourOwnType *
。
答案 1 :(得分:2)
函数指针可以有任何返回类型,它只是一个指向函数的指针,所以如果一个函数不打算任何东西,它返回一个void
,函数指针也是如此。
函数指针的最常见用法是实现回调以提供异步机制。
我之前的回答,详细解释了这一点:
答案 2 :(得分:1)
函数指针几乎可以包含任何返回类型。考虑这个例子:
#include "stdafx.h"
#include <iostream>
using namespace std;
// this defines a type called MathOp that is a function pointer returning
// an int, that takes 2 int arguments
typedef int (*MathOp)(int, int);
enum MathOpType
{
Add = 1,
Subtract = 2
};
// some generic math operation to add two numbers
int AddOperation(int a, int b)
{
return a+b;
}
// some generic math operation to subtract two numbers
int SubtractOperation(int a, int b)
{
return a-b;
}
// function to return a math operation function pointer based on some argument
MathOp GetAMathOp(MathOpType opType)
{
if (opType == MathOpType::Add)
return &AddOperation;
if (opType == MathOpType::Subtract)
return &SubtractOperation;
return NULL;
}
int _tmain(int argc, _TCHAR* argv[])
{
// declare a variable with the type MathOp, which is a function pointer to
// a function taking two int arguments, and returning an int.
MathOp op = &AddOperation;
std::cout << op(2, 3) << std::endl;
// switch the operation we want to perform by calling our one op variable
op = &SubtractOperation;
std::cout << op(2, 3) << std::endl;
// just an example of using a function that returns a function pointer
std::cout << GetAMathOp(MathOpType::Subtract)(5, 1) << std::endl;
std::getchar();
return 0;
}
上面的程序打印5,-1,然后是4.函数指针可以有任何返回类型,并且非常强大。
答案 3 :(得分:0)
不需要函数指针返回void类型。 90%的例子演示了带有void类型的函数指针;因为,更少的信息(并且希望不那么混乱)会分散读者对指向功能的指针的注意力。
This excellent tutorial清楚地演示了返回int
类型的函数的函数指针。
答案 4 :(得分:0)
如何定义指针功能?如果你的意思是说“指向函数的指针”,那显然不是这样。相反,它返回一个void指针。使用void指针的优点是它本质上是通用的,可以转换为我们要求的指针。