is there difference between with or without \* for function pointer in C?

my function pointer declaration like this

```
typedef void (*DListVisitNode) (Node*, void*);
void DListTraverse( NodeList* , DListVisitNode , void*);

```

i have code like these

```
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 );

```

both of DListTraverse works, but the one with \* throws warning like this

```
warning: passing argument 2 of ‘DListTraverse’ from incompatible pointer type

```

i would simply delete the \* afterward, but what's the difference between them?