【问题标题】:Pointer to a function and its return type (void)指向函数的指针及其返回类型 (void)
【发布时间】:2018-04-06 19:52:02
【问题描述】:

这样的声明void *(*function) () 有效吗? 如果它是有效的,那么*function 将返回任何地址给被调用的函数。 在那个地址,返回什么值? 保存在该地址的值是否为 0。如果为零,return 0 与返回类型为 void 的函数中不返回任何内容有什么区别。

【问题讨论】:

  • “这样的声明 void *(*function) () 是否有效?” -- 编译器会为您提供这个问题的最佳答案。是的,它是有效的。 function 是一个指向函数的指针,它没有任何参数并返回一个 void 指针。阅读this answer 了解有关如何阅读 C 声明的详细说明。
  • 也许更好的方法是解释为什么你有这些问题,单独来看,它们几乎没有任何意义。
  • 问题措辞不好,但答案很有用

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


【解决方案1】:

符号

void * (*function)();

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

由于这只是声明了一个变量,它没有定义一个函数,因此无法确定要返回什么值。在调用它之前,您需要分配这个指针指向一个函数。

一旦你指定function 指向某个东西,如果你调用function,你会得到一个void *,你可以认为它是一个“纯内存地址”,因为它包含一个地址但是不能取消对没有强制转换的对象的引用。

请注意,返回 void * 与返回类型为 void 的函数不同。前者的意思是“我返回一个内存地址”,后者的意思是“我什么都不返回”。

【讨论】:

    【解决方案2】:

    声明如下:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      • 2020-06-11
      • 1970-01-01
      • 2013-07-19
      • 2013-04-10
      相关资源
      最近更新 更多