我一直想问这个问题一段时间了。这些功能发生了什么?为什么括号中的名字?
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);
答案 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而不是函数名称。因此他们可以指向任何相同类型和属性的函数。