为什么这些函数名称在括号中?

时间:2017-08-18 00:51:32

标签: c function-pointers quake

我一直想问这个问题一段时间了。这些功能发生了什么?为什么括号中的名字?

void        (*think)(gentity_t *self);
void        (*reached)(gentity_t *self);    // movers call this when hitting endpoint
void        (*blocked)(gentity_t *self, gentity_t *other);
void        (*touch)(gentity_t *self, gentity_t *other, trace_t *trace);

3 个答案:

答案 0 :(得分:4)

在您的示例中,函数名中的括号表示指向函数地址的变量。 如果你不使用括号

void * think(gentity_t *self);// equal (void *) think(gentity_t *self); 

它表示具有名称的函数的定义:think,return:void *,parameter:gentity_t * self; 这些是指向函数的变量。

答案 1 :(得分:2)

这些声明是函数指针,它指向一个函数,可以随时更改。

我建议你对C中的函数指针进行一些研究,因为它们非常有用。

如果您了解C ++的class MyModelAdmin(admin.ModelAdmin): def formfield_for_manytomany(self, db_field, request, **kwargs): if db_field.name == "cars": kwargs["queryset"] = Car.objects.filter(owner=request.user) return super(MyModelAdmin, self).formfield_for_manytomany(db_field, request, **kwargs) ,那么它们实际上就是它们的旧C版本。

答案 2 :(得分:1)

这些是https://api.domo.com/oauth/token?grant_type=client_credentials&scope=data%20user而不是函数名称。因此他们可以指向任何相同类型和属性的函数。