Cの関数ポインタの*の有無に違いはありますか?
このような私の関数ポインタ宣言
typedef void (*DListVisitNode) (Node*, void*);
void DListTraverse( NodeList* , DListVisitNode , void*);
私はこれらのようなコードを持っています
void print_index( Node* node, void* ctx)
{
printf("index:%d\n", node->index);
}
void* print_content( Node* node, void* ctx)
{
printf("content:%s\n", node->content);
}
void DListTraverse(NodeList* nodelist, DListVisitNode visit_func, void* ctx)
{
Node* cur_node = nodelist->headnode;
while( cur_node != NULL)
{
visit_func( cur_node, ctx );
cur_node = cur_node->nextnode;
}
}
DListTraverse( nodelist, print_content, NULL );
DListTraverse( nodelist, print_index, NULL );
両方のDListTraverseは機能しますが、*が付いているものはこのような警告をスローします
warning: passing argument 2 of ‘DListTraverse’ from incompatible pointer type
後で*を削除するだけですが、違いは何ですか?