此声明void *(*function) ()
是否有效?
如果它有效,那么*function
将返回任何地址到被调用的函数。
在那个地址,返回什么价值?
该地址的值保存为0.如果为零,则return 0
之间的差异是什么,并且在返回类型为void
的函数中不返回任何内容。
答案 0 :(得分:2)
符号
void * (*function)();
表示“声明一个名为function
的函数指针,它指向一个带有未指定数量的参数的函数,然后返回void *
。”
因为这只是声明一个变量,所以它没有定义一个函数,所以没有什么可以说什么值会被返回。您需要将此指针指定为指向函数,然后才能调用它。
指定function
指向某个内容后,如果您拨打function
,则会返回void *
,您可以将其视为“纯内存地址”因为它包含一个地址但不能在没有强制转换的情况下解除引用。
请注意,返回void *
与具有void
返回类型的函数不同。前者的意思是“我返回一个内存地址”,后者的意思是“我根本不返回任何内容。”
答案 1 :(得分:1)
声明如下:
function -- function is a
*function -- pointer to
(*function) () -- function taking unspecified parameters
*(*function) () -- returning pointer to
void *(*function) (); -- void
因此,function
是函数类型的指针,而不是函数本身。你可以有多个函数,每个函数返回指向void
的指针:
void *foo( void ) { ... }
void *bar( void ) { ... }
void *bletch( void ) { ... }
您可以使用function
指针指向其中的每个函数,并在运行时决定调用哪个函数:
if ( condition1 )
function = foo;
else if ( condition2 )
function = bar;
else
function = bletch;
void *ptr = function(); // or (*function)();