【问题标题】:What does “typedef void *(*Something)(unsigned int)” mean“typedef void *(*Something)(unsigned int)”是什么意思
【发布时间】:2020-12-07 10:21:56
【问题描述】:

我想知道,下面是什么意思 在.h中,它有

 typedef void *(*some_name)(unsigned int);

然后在.c中

some_name rt;
some_name State= 0;
unsigned int t = 1;
rt = (some_name) State(t);

【问题讨论】:

标签: c function-pointers typedef


【解决方案1】:

它为指向返回类型为void* 和单个无符号int 参数的函数的指针创建别名some_name。一个例子:

typedef void *(*my_alloc_type)(unsigned int);

void *my_alloc(unsigned int size)
{
    return malloc(size);
}

int main(int argc, char *argv[])
{
    my_alloc_type allocator = my_alloc;
    void *p = allocator(100);
    free(p);
    return 0;
}

【讨论】:

    【解决方案2】:

    这个类型定义

    typedef void *(*some_name)(unsigned int);
    

    为指向void *( unsigned int ) 类型函数的指针引入别名,该函数具有返回类型void * 和一个unsigned int 类型参数。

    至于这段代码sn-p

    some_name rt;
    some_name State= 0;
    unsigned int t = 1;
    rt = (some_name) State(t);
    

    那就没有意义了。

    【讨论】:

      【解决方案3】:
      typedef void *(*some_name)(unsigned int);
                      ^^^^^^^^^

      somename

      typedef void *(*some_name)(unsigned int);
                    ^^ ^

      指针

      typedef void *(*some_name)(unsigned int);
                                ^^^^^^^^^^^^^^

      到一个接受无符号整数的函数

      typedef void *(*some_name)(unsigned int);
              ^^^^^^

      并返回一个指向 void 的指针

      typedef void *(*some_name)(unsigned int);
      ^^^^^^^

      但对于类型。


      所以“somename 类型用于接受无符号并返回指向 void 的指针的函数”

      #include <stdlib.h>
      typedef void *(*some_name)(unsigned int);
      void *foo(unsigned t) {
          if (t == 0) return NULL;
          return malloc(t);
      }
      int main(void) {
          somename fxptr = foo;
          void *bar = fxptr(42);
          free(bar);
      }
      

      【讨论】:

        猜你喜欢
        • 2011-04-28
        • 1970-01-01
        • 2012-10-03
        • 1970-01-01
        • 2023-03-18
        • 2014-04-22
        • 2010-10-04
        • 1970-01-01
        相关资源
        最近更新 更多