“typedef void *(*Something)(unsigned int)”是什么意思

What does “typedef void *(*Something)(unsigned int)” mean

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

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

然后在.c

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

这个类型定义

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

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

至于这段代码

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

那就没意义了

它为指向具有 return 类型 void* 和单个 unsigned 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;
}
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);
        ^^^^^^

和 return 是指向 void

的指针
typedef void *(*some_name)(unsigned int);
^^^^^^^

但对于类型。


因此“somename 类型适用于接受无符号和 return 指向 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);
}