I understand my second statement that "why & is not needed for normal function pointers" because function name itself is address of the function.
What I do not understand is why '&' is strictly needed for member function pointers?
Examples: Normal function pointers:
int add(int a, int b) {
  return (a + b);
}
int (*fp)(int, int);
fp = add;
(*fp)(2, 3) // This would give me addition of a and b, i.e. 5
Member function pointers:
class ABC {
  public:
    int i;
    ABC() { i = 0; }
    int addOne(int j) {
      return j + 1;
    }
};
// Member function pointer
int (ABC::*mfp)(int); 
// This is what I am talking about. '&' in below line.
mfp = &ABC::addOne;
ABC abc;
std::cout << (abc.*mfp)(2) << std::endl;
 
     
    