指向函数及其 return 类型的指针 (void)

Pointer to a function and its return type (void)

这样的声明void *(*function) ()有效吗? 如果它有效,那么 *function 将 return 任何地址到被调用的函数。 在那个地址,returning 的值是多少? 在该地址保存的值是否为 0。如果为零,return 0 和 return 之间的区别是什么 return 类型 void 的函数中没有任何内容。

符号

void * (*function)();

的意思是“声明一个名为function的函数指针,它指向一个接受未指定数量参数的函数,然后return是一个void *。”

因为这只是声明了一个变量,它没有定义一个函数,所以没有什么可以说的 returned。您需要先将 this 指针指向一个函数,然后才能调用它。

一旦你分配 function 指向某物,如果你调用 function,你将得到一个 void *,你可以将其视为“纯内存” address”,因为它包含地址但不能在没有转换的情况下取消引用到对象。

请注意,returning void * 与具有 void return 类型的函数不同。前者的意思是“我return一个内存地址”,后者的意思是“我根本return什么都没有。”

声明内容如下:

        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)();