Two forms are not equivalent.
void (*ptr_foo)not a pointer to everything. This is a normal, invalid void pointer. Brackets are redundant and misleading. It is exactly as if you wrote void* ptr_foo.
void (*ptr_foo)(int, int)is the correct way to declare a pointer to a function with two intand return void.
, , , C, void . void*, void* .
, , . void (*foo)(int, int) void (*foo).
some_function foo_for_foo, some_function, .
, foo int void, . ptr_foo int (*ptr_foo) ptr_foo = &foo, void int .
, . , , .