Well, if you didn't have the function's address, you wouldn't be able to call it.
Since the function is not a static member function, you need an object to call it with, which is why you are passing the object as well.
If you could do like you asked, that would basically amount to passing both the object and the function pointer anyway, which is what you are doing in the end.
Just for a spherical view :
Is there any other area where we do this, using both the object address and the method class address to use-call the method?