以下是 c 中的代码片段,gcc 作为编译器 v:12.
有比较两个字符串的功能
int compareEmployee(Emp* e1,Emp* e2)
另一个函数将指向函数的指针作为参数。
Node* getnode(Linkedlist* ls,COMPARE com,void* data)
最后我们可以定义一个指针并赋值给函数。
typedef int (*COMPARE)(void *
,void *
);
因此作者使用了另一种调用函数的形式
Node* node = getnode(&list,(int(*)(void *, void *))compareEmployee, data);
我不完全理解第二个论点。这是定义函数内联指针而不将其分配给变量的另一种形式吗?
语法到底是怎样的
它看起来像一个匿名指针,指向一个已知函数,其中需要确切的签名。
这只是一个转换运算符 -
(int(*)(void *, void *))compareEmployee
将表达式转换为给定类型,在这种情况下,compareEmployee
被转换为 int(*)(void *, void *)
类型。
以这种方式转换函数是未定义的行为,尽管在这种情况下您可能会逃避它,因为参数的大小相同。