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

时间:2017-10-25 16:08:59

标签: c function pointers void-pointers return-type

此声明void *(*function) ()是否有效? 如果它有效,那么*function将返回任何地址到被调用的函数。 在那个地址,返回什么价值? 该地址的值保存为0.如果为零,则return 0之间的差异是什么,并且在返回类型为void的函数中不返回任何内容。

2 个答案:

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