【问题标题】: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);
}